事务或变量声明错误

Transaction or variable declaration 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 变量声明的错误是 Syntax error: unexpected 'var_CurcId' (identifier)

我是新手,所以我希望你能帮助我。我仍在尝试不同的方法,例如使用 := 运算符以及 select intoset.

如有任何帮助,我将不胜感激。

谢谢。

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

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 Fiddle.

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