簡體   English   中英

MYSQL創建存儲過程包括DELETE,SELECT和INSERT

[英]MYSQL create stored procedure included DELETE, SELECT and INSERT

我閱讀了手冊,可以創建簡單的存儲過程。 它的工作正常。 但是現在我需要為我創建復雜的過程,包括DELETE,SELECT和INSERT

第一:

delete from 111test;

下一個:

SELECT u.user_id, u.user_nickname, u.country_id, u.city_id, u.avatar_id,
  (SELECT name FROM countries WHERE id = u.country_id) country_name,
  (SELECT name FROM cities WHERE id = u.city_id) city_name
FROM users_onsite uo 
LEFT JOIN users u ON u.user_id = uo.user_id
WHERE u.avatar_id > 0;

接下來:

INSERT INTO 111test (type,user_id,some_datas1,some_datas2,some_datas3) 
  values (53,$user_id,'$user_nickname',$country_name','$city_name')

因此,我的程序是:

BEGIN

DECLARE var_user_id INT(50);
DECLARE var_some_datas1 varchar(255);
DECLARE var_some_datas2 varchar(255);
DECLARE var_some_datas3 varchar(255);

delete from 111test;

SELECT u.user_id, u.user_nickname, u.country_id, u.city_id, u.avatar_id,
  (SELECT name FROM countries WHERE id = u.country_id) country_name,
  (SELECT name FROM cities WHERE id = u.city_id) city_name
  FROM users_onsite uo 
  LEFT JOIN users u ON u.user_id = uo.user_id
  WHERE u.avatar_id > 0;

INSERT INTO  111test (type,user_id,some_datas1,some_datas2,some_datas3)
  VALUES (53,var_user_id,var_some_datas1,var_some_datas2,var_some_datas3);

END

結果:您的SQL查詢已成功執行1172行,該行受該過程中的最后一條語句影響

但是在表111test中插入了零行。

請有人幫我。

那么,這里的路障是什么。 您可以創建包含DML操作的過程。 請參閱下面的示例(盡管在SQL Server中創建)

create procedure sp_crud_test
as
begin
delete from sample1;

select * from sample3;

insert into sample1 select * from sample3;
end

exec sp_crud_test

所以在你的情況下

delimiter //
CREATE PROCEDURE sp_crud_test (IN 
user_id int, IN user_nickname varchar(10),
IN country_name varchar(10),IN city_name varchar(10))
BEGIN
delete from 111test;

SELECT u.user_id, u.user_nickname, u.country_id, u.city_id, u.avatar_id,
  (SELECT name FROM countries WHERE id = u.country_id) country_name,
  (SELECT name FROM cities WHERE id = u.city_id) city_name
FROM users_onsite uo 
LEFT JOIN users u ON u.user_id = uo.user_id
WHERE u.avatar_id > 0;

INSERT INTO 111test (type,user_id,some_datas1,some_datas2,some_datas3) 
  values (53,user_id,user_nickname,country_name,city_name)
END//

比這樣稱呼它

CALL sp_crud_test(10,'tk','US','london')

編輯:現在,您正在嘗試將選擇查詢值插入該表; 應該像下面這樣

delimiter //
CREATE PROCEDURE sp_crud_test
BEGIN
delete from 111test;

INSERT INTO 111test (type,user_id,some_datas1,some_datas2,some_datas3) 
SELECT '53' as type, u.user_id, u.user_nickname,
  (SELECT name FROM countries WHERE id = u.country_id) country_name,
  (SELECT name FROM cities WHERE id = u.city_id) city_name
FROM users_onsite uo 
LEFT JOIN users u ON u.user_id = uo.user_id
WHERE u.avatar_id > 0;    
END//

然后像

CALL sp_crud_test

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM