在 PL/SQL 中的触发器内调用函数
Posted
技术标签:
【中文标题】在 PL/SQL 中的触发器内调用函数【英文标题】:Call function inside trigger in 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(数字)、一个日期和一个重量(数字)。
问候
【问题讨论】:
【参考方案1】:尝试使用:new.id
代替USRID
并添加FOR EACH ROW
。
【讨论】:
谢谢,触发器现在可以编译,但是在插入表时我得到一个“ORA-04091:表名正在变化,触发器/函数可能看不到它” @DanielNovais - 在触发器内部,您不能从创建触发器的表中select
。使用:new.column_name
从插入行的column_name
列读取数据。以上是关于在 PL/SQL 中的触发器内调用函数的主要内容,如果未能解决你的问题,请参考以下文章
在 Java 中调用 Oracle PL/SQL 中的过程或函数。返回结果集 false
PLS-00306:调用 'GET_LINE' 时参数的数量或类型错误。在 PL/SQL 中的函数中传递字符串参数时出现此错误