这是我的第一个触发器,也是我的第一个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/