如何使用mysql在触发器中声明变量? 创建或替换触发考勤\u在插入或更新考勤后通知 每行 声明 V_STUDENT_ID STUDENT.STUDENT_ID%类型:=NULL; V_HOD_ID部门负责人。HOD_ID%类型:=NULL; V_子代码学生。子代码%TYPE:=NULL; V_出勤率%类型:=空; 开始 从STUDENT_ID=:NEW.STUDENT_ID的主题中,选择SUB_CODE,SUB_NAME进入V_SUB_CODE; 从学生中选择学生ID,其中SUBJECT\u CODE=:NEW.SUBJECT\u CODE; 从STUDENT\u HOD中选择HOD\u ID进入V\u HOD\u ID,其中STUDENT\u ID=:NEW.STUDENT\u ID; 从Attentince(其中STUDENT_ID=:NEW_STUDENT_ID)中选择Attentince to V_Attentince 如果(V_出席率不为空,V_子_代码不为空,V_学生ID不为空,V_HOD_ID不为空),则 如果(:NEW.ATTENDENCE

如何使用mysql在触发器中声明变量? 创建或替换触发考勤\u在插入或更新考勤后通知 每行 声明 V_STUDENT_ID STUDENT.STUDENT_ID%类型:=NULL; V_HOD_ID部门负责人。HOD_ID%类型:=NULL; V_子代码学生。子代码%TYPE:=NULL; V_出勤率%类型:=空; 开始 从STUDENT_ID=:NEW.STUDENT_ID的主题中,选择SUB_CODE,SUB_NAME进入V_SUB_CODE; 从学生中选择学生ID,其中SUBJECT\u CODE=:NEW.SUBJECT\u CODE; 从STUDENT\u HOD中选择HOD\u ID进入V\u HOD\u ID,其中STUDENT\u ID=:NEW.STUDENT\u ID; 从Attentince(其中STUDENT_ID=:NEW_STUDENT_ID)中选择Attentince to V_Attentince 如果(V_出席率不为空,V_子_代码不为空,V_学生ID不为空,V_HOD_ID不为空),则 如果(:NEW.ATTENDENCE,mysql,database,rdbms,Mysql,Database,Rdbms,我在declare中遇到语法错误,无法在MySQL中引用列的数据类型。DECLARE必须静态声明变量的类型和大小 差不多 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_DEPART

我在declare中遇到语法错误,无法在MySQL中引用列的数据类型。DECLARE必须静态声明变量的类型和大小

差不多

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;   
不是


希望这有帮助。

请显示语法错误的完整堆栈
DECLARE myvar VARCHAR( 8 ) -- This is valid in Mysql
DECLARE myvar mytable.myfield%TYPE    --This is invalid in Mysql