【问题标题】:MySQL stored procedure syntax troublesMySQL存储过程语法问题
【发布时间】:2020-03-08 19:58:04
【问题描述】:

我正在处理这个过程,但我不太熟悉在 MySQL 中编写存储过程,当我尝试创建此处所示的存储过程时,它一直告诉我第 9 行的语法不正确

DELIMITER//

CREATE PROCEDURE InsertUser (
IN new_USER_ID              BIGINT,
IN new_USER_NAME            VARCHAR(36),
IN new_ENCRYTED_PASSWORD    VARCHAR(128),
IN new_ENABLED              BIT,
IN select_Role_ID           BIGINT)
BEGIN
DECLARE user_role_id BIGINT
SET user_role_id = (SELECT max(id) from USER_ROLE);

Insert into App_User(USER_ID, USER_NAME, ENCRYTED_PASSWORD, ENABLED) 
        values(new_USER_ID, new_USER_NAME, new_ENCRYTED_PASSWORD, new_ENABLED);

INSERT INTO USER_ROLE(ID, USER_ID, ROLE_ID) 
        values(user_role_id+1, new_USER_ID, select_Role_ID);
END;//
DELIMITER;

谁能告诉我正确的语法应该是怎样的?

【问题讨论】:

    标签: mysql stored-procedures mysql-workbench


    【解决方案1】:

    这是使用delimiter 的正确方法。见mysql documentation

    DELIMITER //
    CREATE PROCEDURE InsertUser (
    IN new_USER_ID              BIGINT,
    IN new_USER_NAME            VARCHAR(36),
    IN new_ENCRYTED_PASSWORD    VARCHAR(128),
    IN new_ENABLED              BIT,
    IN select_Role_ID           BIGINT)
    BEGIN
       Insert into App_User(USER_ID, USER_NAME, ENCRYTED_PASSWORD, ENABLED) 
            values(new_USER_ID, new_USER_NAME, new_ENCRYTED_PASSWORD, new_ENABLED);
    
      INSERT INTO USER_ROLE(ID, USER_ID, ROLE_ID) 
              values(user_role_id+1, new_USER_ID, select_Role_ID);
    END //
    
    DELIMITER ;
    

    【讨论】:

    • 代码中缺少的DELIMITER是因为我在将代码上传到堆栈时搞砸了,所以您可以在代码上方的行中看到它。
    • @N.Huy,你的分号和分隔符DELIMITER ;和DELIMITER //之间应该有一个空格
    猜你喜欢
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    相关资源
    最近更新 更多