插入带有参数MYSQL的存储过程不起作用

Posted

技术标签:

【中文标题】插入带有参数MYSQL的存储过程不起作用【英文标题】:insert into in stored procedure with parameters MYSQL doesnt work 【发布时间】:2013-10-03 11:42:45 【问题描述】:

我正在尝试使用 mysql 工作台创建一个带有参数的存储过程,以将数据插入表中。

我做错了什么??

    USE deb42181_ramos;
CREATE PROCEDURE sp_insertuser(IN gebruikersnaamparam varchar(10)
, IN wachtwoordparam VARCHAR(50)
, IN voornaamparam VARCHAR(15)
, IN achternaamparam VARCHAR(15)
, IN tussenvoegselparam VARCHAR(10)
, IN gebruikerlevelparam INT)
BEGIN

INSERT INTO gebruikers (
gebruikersnaam
, wachtwoord
, voornaam
, achternaam
, tussenvoegsel
, gebruikerlevel)

    VALUES (gebruikersnaamparam
    , wachtwoordparam
    , voornaamparam
    , achternaamparam
    , tussenvoegselparam
    , gebruikerlevelparam);

END

错误出现在值的最后一行之后)他不希望出现 ; 关于杰伦

【问题讨论】:

错误信息是什么? 【参考方案1】:

你需要改变分隔符,像这样:

# change the delimiter to $$, so you can use semicolon in create procedure
DELIMITER $$

USE deb42181_ramos$$

DROP PROCEDURE IF EXISTS sp_insertuser$$

CREATE PROCEDURE sp_insertuser(IN gebruikersnaamparam varchar(10)
, IN wachtwoordparam VARCHAR(50)
, IN voornaamparam VARCHAR(15)
, IN achternaamparam VARCHAR(15)
, IN tussenvoegselparam VARCHAR(10)
, IN gebruikerlevelparam INT)
BEGIN

INSERT INTO gebruikers (
gebruikersnaam
, wachtwoord
, voornaam
, achternaam
, tussenvoegsel
, gebruikerlevel)

    VALUES (gebruikersnaamparam
    , wachtwoordparam
    , voornaamparam
    , achternaamparam
    , tussenvoegselparam
    , gebruikerlevelparam);

END$$
# change the delimiter back to semicolon
DELIMITER ;

【讨论】:

谢谢,现在它可以工作了,但我为什么需要它呢?这是什么原因? 默认情况下,mysql本身将分号识别为语句分隔符,因此必须临时重新定义分隔符,以使mysql将整个存储的程序定义传递给服务器。否则,MySQL 在到达 END 语句之前中断 CREATE PROCEDURE。您可以查看文档了解更多详细信息:dev.mysql.com/doc/refman/5.5/en/stored-programs-defining.html【参考方案2】:
DELIMITER $$
DROP PROCEDURE IF EXISTS `database_name`.`ins`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `ins`(in nam varchar(50),in username varchar(50), in branch varchar(50))
BEGIN
insert into table_name(nam,user_name,branch) values(nam,username,branch);
    END$$
DELIMITER ;

call ins('sas','sdsd','sdsd')

【讨论】:

以上是关于插入带有参数MYSQL的存储过程不起作用的主要内容,如果未能解决你的问题,请参考以下文章

VS 2010 - 带有 MySql 存储过程的实体框架似乎不起作用

从后面的 C# 代码调用存储过程时插入语句不起作用

MYSQL 从存储过程中的临时表中选择 JOIN 不起作用

使用存储过程执行时,executeUpdate() 不起作用

插入选择存储过程不起作用插入NULL

实体框架 4 函数导入不起作用