MYSQL创建存储过程,包括删除、选择和插入
我阅读手册,我可以创建简单的存储过程。 它的工作很好。但现在我需要为我创建复杂的过程,包括删除、选择和插入 第一:MYSQL创建存储过程,包括删除、选择和插入,mysql,sql,stored-procedures,Mysql,Sql,Stored Procedures,我阅读手册,我可以创建简单的存储过程。 它的工作很好。但现在我需要为我创建复杂的过程,包括删除、选择和插入 第一: delete from 111test; 下一步: 接下来: INSERT INTO 111test (type,user_id,some_datas1,some_datas2,some_datas3) values (53,$user_id,'$user_nickname',$country_name','$city_name') 因此,我的程序是: BEGIN DE
delete from 111test;
下一步:
接下来:
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中创建的) 所以在你的情况下会是这样的
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')
编辑:
现在我明白了,您正试图将select查询值插入到该表中;应该像下面这样做
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
是的,我已经像你一样试过了。结果:SQL查询已成功执行1172行,受过程中最后一条语句的影响,但在表111test中插入了零行。I添加:声明var\u user\u id INT(11);声明var_some_datas1 INT(11);声明var_some_datas2 INT(11);声明var_some_datas3 INT(11);但结果是一样的。@TKVideoChat,请参见编辑后的答案。您需要将参数传递给过程。当我尝试创建过程时,我得到一个错误:
您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解在“@user\u id int”附近、在@user\u昵称varchar(10)、在@country\u name varchar(10)中、在第2行的@c”中使用经过编辑的SP的正确语法。问题在于用于全局变量的@
登录参数。现在它可以工作了。我做了一个调用sp_crud_test(10,'tk','US','london')
但是在表111test中插入了一行:10,'tk','US','london,而不是1473我的行。
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