2015-11-18 44 views
0
CREATE OR REPLACE TRIGGER ATTENDANCE_NOTIFY AFTER INSERT OR UPDATE ON ATTENDANCE 
FOR EACH ROW 
DECLARE 
    V_STUDENT_ID STUDENT.STUDENT_ID%TYPE := NULL; 
    V_HOD_ID  HEAD_OF_DEPARTMENT.HOD_ID%TYPE := NULL; 
    V_SUBCODE STUDENT.SUBCODE%TYPE := NULL; 
    V_ATTENDANCE ATTENDENCE%TYPE := NULL; 
BEGIN 
    SELECT SUB_CODE, SUB_NAME INTO V_SUB_CODE, FROM SUBJECT WHERE STUDENT_ID = :NEW.STUDENT_ID; 
    SELECT STUDENT_ID INTO V_STUDENT_ID FROM STUDENT WHERE SUBJECT_CODE = :NEW.SUBJECT_CODE; 
    SELECT HOD_ID INTO V_HOD_ID FROM STUDENT_HOD WHERE STUDENT_ID = :NEW.STUDENT_ID; 
    SELECT ATTENDENCE INTO V_ATTENDENCE FROM ATTENDENCE WHERE STUDENT_ID=:NEW_STUDENT_ID 
    IF (V_ATTENDENCE IS NOT NULL AND V_SUB_CODE IS NOT NULL AND V_STUDENT_ID IS NOT NULL AND V_HOD_ID IS NOT NULL) THEN 
    IF (:NEW.ATTENDENCE < (V_ATTENDENCE * 0.85)) THEN 
     INSERT INTO NOTIFY VALUES(V_HOD_ID, V_STUDENT_ID || ' (ID:- ' || :NEW.STUDENT_ID ||') HAS LESS THAN 85% ATTENDENCE IN SUBJECT ' || V_SUB_CODE); 
     END IF; 
    END IF;  
EXCEPTION 
WHEN OTHERS 
    THEN NULL; 
END; 

我在声明如何用mysql触发变量的触发器?

+1

显示完整的语法错误堆栈请 –

回答

0

得到一个语法错误,有没有办法指在MySQL列的数据类型。 DECLARE必须静态声明一个变量的类型和大小。

喜欢的东西

DECLARE myvar VARCHAR(8) -- This is valid in Mysql 

DECLARE myvar mytable.myfield%TYPE --This is invalid in Mysql 

希望这有助于。