【问题标题】:Call function inside trigger in PL/SQL在 PL/SQL 中的触发器内调用函数
【发布时间】:2013-01-30 18:31:37
【问题描述】:

所以我有一个函数,给定一个用户 id,根据他上次的体重测量计算他的 bmi(体重指数)(我有一个记录所有测量结果的表),我想编写一个触发器,每次用户插入他的体重,触发器检查用户的体重指数是否低于限制。功能还可以,但我无法让触发器工作,这就是我所拥有的:

1  CREATE OR REPLACE
2  TRIGGER BMITG
3  AFTER INSERT ON WEIGHTS
4  BEGIN
5     IF BMI(USRID)>25
6     THEN raise_application_error(-20001,'Please control your weight.');
7     END IF;
8  END;

但我得到了错误: 错误(6,3):PL/SQL:语句被忽略 错误(6,10):PLS-00201:必须声明标识符“IDENT”

我认为问题在于数据库不知道 USRID 是激活触发器的 INSERT 的用户 ID。我怎么解决这个问题? 顺便说一句,WEIGHTS 表有一个用户 ID(数字)、一个日期和一个重量(数字)。

问候

【问题讨论】:

    标签: function plsql triggers


    【解决方案1】:

    尝试使用:new.id 代替USRID 并添加FOR EACH ROW

    【讨论】:

    • 谢谢,触发器现在可以编译,但是在插入表时我得到一个“ORA-04091:表名正在变化,触发器/函数可能看不到它”
    • @DanielNovais - 在触发器内部,您不能从创建触发器的表中select。使用:new.column_name从插入行的column_name列读取数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    相关资源
    最近更新 更多