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 触发器引发应用程序错误不起作用的主要内容,如果未能解决你的问题,请参考以下文章

检索新值时触发器在 PLSQL 中不起作用

每行设置 new.column 的 PLSQL 触发器不起作用

对 Apple 的 APNS 的 PushSharp 通知不起作用,不会引发任何异常

SwiftUI navigationBarHidden 不起作用并引发错误

PUT 方法在表单中不起作用会引发错误

使用 jQuery .autocomplete 检索项目将不起作用,也不会引发任何错误