2016-07-18 1 views
0

이것이 제 첫 번째 트리거이고 제 첫 번째 pl/sql 코드입니다.DECLARE가 MYSQL TRIGGER에서 작동하지 않습니다

다음 트리거의 변수 선언이 작동하지 않으며 다른 오류를 확인할 수 없습니다.

[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:[email protected]_num+1; 
    @apply:[email protected]+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] 

이 문제를 해결할 수 있도록 도와주세요.

답변

0

user defined variables (@로 시작)과 복합 문 (begin과 end 사이에 선언하여 사용) 내에서 선언 된 변수를 혼합합니다. max_num 및 @max_num 변수는 서로 다른 두 변수입니다. @없이 변수 이름을 사용하도록 코드를 다시 작성하십시오.

변수의 차이점에 대한 자세한 내용은 MySQL: @variable vs. variable. Whats the difference? SO 주제를 참조하십시오.

+0

나는 그것을 또한했다. 하지만 작동하지 않습니다. –

+0

Pls는 작동하지 않는 것에 대해보다 구체적입니다. – Shadow

0
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 

나는 u는 선언 블록에 선언 된 것을 @와 변수이 작동하는지 당신이 당신의 selects.Tell 날을 사용하는 것과 같은이 arent 때문에이 일을해야한다고 생각합니다.