交易或变量声明错误

时间:2016-05-28 13:45:12

标签: mysql sql stored-procedures transactions syntax-error

我刚刚开始学习事务和存储过程,并且我试图让自己熟悉将结果集中的值赋值给变量的不同方法。

可能导致DECLARE var_CurcId INT DEFAULT 0;

错误的原因

这是我到目前为止所做的事情。

CREATE DEFINER=`root`@`localhost` PROCEDURE `addCurriculumWithSchoolYear`(IN p_subjectName varchar(50), IN p_yrLevel varchar(30), IN p_desc TEXT, IN p_creator varchar(20))
BEGIN

    DECLARE hasError BOOL DEFAULT 0;
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET hasError = 1;

    DECLARE var_CurcId INT DEFAULT 0; 
    DECLARE var_syStart INT DEFAULT 0;
    DECLARE var_syEnd INT DEFAULT 0;

        START TRANSACTION;

        -- 1 insert statement to curriculum table
            INSERT INTO curriculum(`name`,`yearLevel`,`description`,`creator`)
            VALUES(p_subjectName,p_yrLevel,p_desc,p_creator);
        -- 2 insert statement to schoolyearcurriculum table

            INSERT INTO schoolyearcurriculums(curriculumId,syStart,syEnd)
            VALUES(var_CurcId,var_syStart,var_syEnd);

        IF `hasError` THEN
            ROLLBACK; -- if error occurs to any of the insert, select statements above, undo it
        ELSE 
            COMMIT; -- if all insert, select statement is successful, execute.
            SELECT 'Successfully Inserted Information';
        END IF;
END;

关于var_CurcId变量声明的erorr正在说Syntax error: unexpected 'var_CurcId' (identifier)

我是新手,所以我希望你能帮助我。我仍尝试使用:=运算符和select into以及set等不同方法。

我很感激任何帮助。

感谢。

1 个答案:

答案 0 :(得分:1)

这有点棘手。只需将所有声明放在处理程序之前:

CREATE PROCEDURE `addCurriculumWithSchoolYear`(IN p_subjectName varchar(50), IN p_yrLevel varchar(30), IN p_desc TEXT, IN p_creator varchar(20))
BEGIN  
    DECLARE hasError BOOL DEFAULT 0;
    DECLARE var_CurcId INT DEFAULT 0; 
    DECLARE var_syStart INT DEFAULT 0;
    DECLARE var_syEnd INT DEFAULT 0;

    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET hasError = 1;

END

Here是一个SQL小提琴。

BEGIN / END块中,所有DECLARE必须是第一个语句。通常处理程序在变量声明之后;但是,在测试之前我没有意识到这是必需的。