这是我的第一个触发器,也是我的第一个pl / sql代码。

以下触发器中的变量声明不起作用,我无法检查其他错误。

[CREATE TRIGGER insert_rollno
BEFORE INSERT ON exam_candidate
FOR EACH ROW

BEGIN
    DECLARE max_num INTEGER(4);
    DECLARE apply INTEGER(10);
    DECLARE reg_yr VARCHAR(2);

    @reg_yr:=SUBSTRING(NEW.regno,12,2);
    SELECT MAX(num)
    INTO max_num
    FROM exam_candidate
    WHERE course_id=NEW.course_id
    AND semester=NEW.semester
    AND yr=NEW.yr;

    SELECT MAX(application)
    INTO apply
    FROM exam_candidate;

    @max_num:=@max_num+1;
    @apply:=@apply+1;

    INSERT INTO exam_candidate(rollno,num,application,regno,course_id,semester,yr,enrollment_dt)
    VALUES(CONCAT(reg_yr,'/',NEW.course_id,'/',CHAR(NEW.yr),CHAR(NEW.semester),CHAR(max_num)),max_num,apply,NEW.regno,NEW.course_id,NEW.semester,NEW.yr,SYSDATE());
END][1]


请帮助我解决这个问题。

最佳答案

您正在混合user defined variables(以@开头)和复合语句中声明的变量(使用begin和end之间的声明)。 max_num和@max_num变量是两个不同的变量。重写代码以使用不带@的变量名。

另请参见MySQL: @variable vs. variable. Whats the difference? SO主题,以获取有关两种类型的变量之间差异的更详细说明。

关于mysql - DECLARE在MYSQL TRIGGER中不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38431988/

10-12 00:02
查看更多