2014-04-17 71 views
1

我讀過手冊,我可以創建簡單的存儲過程。 它的工作很好。但現在我需要創建複雜,我的程序包括DELETE,SELECT和INSERTMYSQL創建存儲過程包括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零行。

請有人幫助我。

回答

1

那麼,這裏的路障是什麼。您可以創建包含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 
+0

是的,我已經嘗試喜歡你的。 結果: 您的SQL查詢已成功執行 受過程中最後一條語句影響的1172行 但在表111test中插入了ZERO行。 我加: DECLARE var_user_id INT(11); DECLARE var_some_datas1 INT(11); DECLARE var_some_datas2 INT(11); DECLARE var_some_datas3 INT(11); 但結果相同。 – TKVideoChat

+0

@TKVideoChat,現在查看編輯答案。您需要將參數傳遞給過程。 – Rahul

+0

當我嘗試創建過程時,出現錯誤:'您的SQL語法出錯;在@ user_id int,IN @user_nickname varchar(10), IN @country_name varchar(10),IN @c'第2行' – TKVideoChat