PLSQL 触发器引发应用程序错误不起作用
Posted
技术标签:
【中文标题】PLSQL 触发器引发应用程序错误不起作用【英文标题】:PLSQL trigger to raise application error not working 【发布时间】:2019-04-23 09:34:39 【问题描述】:我正在尝试创建一个触发器,如果总行数超过 10,则会引发错误,plsql 代码已成功编译,但没有产生任何错误。 这是plsql代码:
SQL> CREATE OR REPLACE TRIGGER customer_count_check
2 BEFORE INSERT OR UPDATE ON customer2
3 FOR EACH ROW
4 DECLARE
5 count_customer NUMBER;
6 max_customer NUMBER := 10;
7 BEGIN
8 SELECT COUNT(*) INTO count_customer FROM customer2 WHERE cusid = :new.cusid;
9 IF count_customer >= max_customer THEN
10 RAISE_APPLICATION_ERROR (-20000,'Customer Table capacity exceeded');
11 END IF;
12 END;
13 /
【问题讨论】:
为我工作:dbfiddle.uk/… 你能提供一个小提琴来说明它是如何不起作用的吗? 嘿@sticky bit 是否有任何限制我们必须在空表中创建这种类型的触发器? 对我来说似乎也很好。尝试用简单的DBMS_OUTPUT.put_line
替换RAISE_APPLICATION_ERROR
,看看你的SELECT
是否工作正常?
@Ajax:没有。但是看看 hotfix 的回答,这似乎很合理。
【参考方案1】:
我会说你的触发器没有像你期望的那样工作,因为你里面的 select 语句总是返回一行。
您根据主键进行过滤!
应该可以的
SQL> CREATE OR REPLACE TRIGGER customer_count_check
2 BEFORE INSERT OR UPDATE ON customer2
3 FOR EACH ROW
4 DECLARE
5 count_customer NUMBER;
6 max_customer NUMBER := 10;
7 BEGIN
8 SELECT COUNT(*) INTO count_customer FROM customer2; --WHERE cusid = :new.cusid;
9 IF count_customer >= max_customer THEN
10 RAISE_APPLICATION_ERROR (-20000,'Customer Table capacity exceeded');
11 END IF;
12 END;
13 /
【讨论】:
以上是关于PLSQL 触发器引发应用程序错误不起作用的主要内容,如果未能解决你的问题,请参考以下文章
每行设置 new.column 的 PLSQL 触发器不起作用
对 Apple 的 APNS 的 PushSharp 通知不起作用,不会引发任何异常