2016-07-18 17 views
0

das ist mein erster Auslöser und mein allererster pl/sql Code.DECLARE funktioniert nicht in MYSQL TRIGGER

Die Variablendeklaration im folgenden Trigger funktioniert nicht und ich kann nicht nach den anderen Fehlern suchen.

[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] 

bitte helfen Sie mir, dieses Problem zu lösen.

Antwort

0

Sie mischen die user defined variables (beginnend mit @) und die Variablen, die innerhalb einer zusammengesetzten Anweisung deklariert werden (mit declare zwischen Anfang und Ende). max_num und @max_num Variablen sind zwei verschiedene. Schreiben Sie Ihren Code neu, um Variablennamen ohne @ zu verwenden.

Siehe auch MySQL: @variable vs. variable. Whats the difference? SO Thema für eine detailliertere Erklärung zu den Unterschieden zwischen den 2 Arten von Variablen.

+0

Ich tat das auch. aber nicht funktioniert. –

+0

Pls genauer gesagt, was nicht funktioniert. – 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 

Ich glaube, das sollte funktionieren, da die Variable mit @, dass u auf dem Declare Block erklärte die gleichen wie diejenigen, Arent Sie auf Ihrem selects.Tell mich verwendet, ob das funktioniert.