MySQL存储过程作为纯SQL

时间:2016-02-16 01:23:17

标签: mysql stored-procedures

我试图写一个插入一个表(A)的存储过程,然后查询另一个表(B),然后最后插入表(C)中的最后一个插入ID,以及表中的结果B.我编写了一个名为VetIdFromCode的存储过程来从表B中进行选择,它可以单独工作。当我单独运行查询时,为IN参数赋值,然后它运行正常,但是当我尝试将其保存为存储过程时,它告诉我无效的SQL附近' SET @LIID ...&#39 ; 非常感谢您的帮助。

CREATE PROCEDURE `NewClientUser`(
IN `uemail` VARCHAR(60), 
IN `uphash` CHAR(40), 
IN `uvcode` VARCHAR(11))
DETERMINISTIC 
MODIFIES SQL DATA 
SQL SECURITY INVOKER 
INSERT INTO users (user_id,user_email,user_hash,user_role) 
    VALUES (NULL,uemail,uphash,'1'); 
SET @LIID = LAST_INSERT_ID();
CALL `VetIdFromCode`(uvcode, @VID);
INSERT INTO user_vet_lookup(user_id,vet_id) 
    VALUES (@LIID,@VID);

1 个答案:

答案 0 :(得分:1)

您需要启动"代码"关键词" BEGIN"并提出一个" END"在末尾。像:

CREATE PROCEDURE `NewClientUser`(
IN `uemail` VARCHAR(60), 
IN `uphash` CHAR(40), 
IN `uvcode` VARCHAR(11))
BEGIN
    DETERMINISTIC 
    MODIFIES SQL DATA 
    SQL SECURITY INVOKER 
    INSERT INTO users (user_id,user_email,user_hash,user_role) 
        VALUES (NULL,uemail,uphash,'1'); 
    SET @LIID = LAST_INSERT_ID();
    CALL `VetIdFromCode`(uvcode, @VID);
    INSERT INTO user_vet_lookup(user_id,vet_id) 
        VALUES (@LIID,@VID);
END

查看文档:{​​{3}}