【问题标题】:Stored procedure not working for inserting data存储过程不适用于插入数据
【发布时间】:2020-08-21 21:20:45
【问题描述】:

我有这张桌子:

User

user_id int PK
username varchar(20)
secret_code varchar(20)
name varchar(20)
age int
gender varchar(20)
city varchar(20)
latest_signin_time timestamp
latest_signout_time timestamp
loc_list json
buddy_list json

我创建了一个存储过程:

create procedure insert_users(IN user_id int , in username varchar(20),in secret_code varchar(20), 
                   in name varchar(20), in age int, in gender varchar(20), in city varchar(20), 
                   in latest_signin_time timestamp, in latest_signout_time timestamp, 
                   in loc_list json , in buddy_list json)
begin

insert into user values(user_id, username, secret_code, name, age, gender, city, 
                        latest_signin_time, latest_signout_time, loc_list,buddy_list)
end ;


call insert_user(​'1', 'avs431','pwd1','Ameya','22','Male','Mumbai',null,null,'[]','[]'​​);

但是,我的代码没有运行,并且不断收到“错误代码:1064。您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以了解在“结束”附近使用的正确语法在第 9 行"

我不确定这里出了什么问题。有人可以帮忙吗?

谢谢!

【问题讨论】:

  • 您在 INSERT 语句之后、END; 之前忘记了 ;。 PS。对于单语句过程,BEGIN-END 块是多余的。

标签: mysql sql stored-procedures procedure


【解决方案1】:
create procedure insert_users(IN user_id int , in username varchar(20),in secret_code varchar(20), 
                   in name varchar(20), in age int, in gender varchar(20), in city varchar(20), 
                   in latest_signin_time timestamp, in latest_signout_time timestamp, 
                   in loc_list json , in buddy_list json)
/* begin */

insert into user values(user_id, username, secret_code, name, age, gender, city, 
                        latest_signin_time, latest_signout_time, loc_list,buddy_list)
/* end */ ;

【讨论】:

  • 我不确定我做错了什么,但我不断收到程序错误,比如这个表: Buddies(first_user_id int, second_user_id int, time timestamp, status varchar(10)) ,我创建了这个过程,创建过程friend_requests(in first_user_id int,in second_user_id int,in time timestamp,in status varchar(10))我不断收到错误
【解决方案2】:

过程中的命令以分号 (;) 结束。在过程参数中使用前缀,这样参数就不会与列名混淆。此外,在INSERT 中列出列名,这样即使在表中添加了列,您的过程也能正常工作。

delimiter //
create procedure insert_users(
in_user_id int, 
in_username varchar(20),
in_secret_code varchar(20), 
in_name varchar(20), 
in_age int, 
in_gender varchar(20), 
in_city varchar(20), 
in_latest_signin_time timestamp, 
in_latest_signout_time timestamp, 
in_loc_list json, 
in_buddy_list json
)
begin

insert into user (user_id, username, secret_code, name, age, gender, 
       city, latest_signtime, latest_signout_time, loc_list, buddy_list)
values(in_user_id, in_username, in_secret_code, in_name, in_age, in_gender, 
       in_city, in_latest_signin_time, in_latest_signout_time, in_loc_list, in_buddy_list);

end
//
delimiter ;

call insert_user(​'1', 'avs431','pwd1','Ameya','22','Male','Mumbai',null,null,'[]','[]'​​);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多