Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MYSQL创建存储过程,包括删除、选择和插入_Mysql_Sql_Stored Procedures - Fatal编程技术网

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