mysql - 如何用mysql在触发器中声明变量?

标签 mysql database rdbms

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 中无法引用列的数据类型。 DECLARE 必须静态声明变量的类型和大小。

类似的东西

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

不是

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

希望这有帮助。

关于mysql - 如何用mysql在触发器中声明变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33775826/

相关文章:

database - BI 与 Django?

database - 在数据库 (RDBMS) 中存储邮政地址的最佳实践?

sql - SQL 数据库的现成 Web 查询接口(interface)

php - Android:如何从 MySQL 检索数据并将其分配给变量

MySQL 选择不包含来自另一个选择的单词的结果

java - 找不到文件 mysql-connector-java-5.1.13-bin.jar

database - Liquibase VARCHAR2 字符长度

mysql - 需要一个 MySQL 查询来显示有 child 的 parent 以及没有 child 的 parent

MySQL 多对多关系在大表上运行缓慢

sql - 如何获取某个用户拥有同一组好友的uid? (SQL)