Oracle 引发应用程序错误的PLSQL触发器不工作
我正在尝试创建一个触发器,如果行总数超过10,则会引发错误,plsql代码已成功编译,但不会生成任何错误。 这是plsql代码:Oracle 引发应用程序错误的PLSQL触发器不工作,oracle,plsql,triggers,Oracle,Plsql,Triggers,我正在尝试创建一个触发器,如果行总数超过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 := 1
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 /
我想说您的触发器并没有像您期望的那样工作,因为您的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 /
我想说您的触发器并没有像您期望的那样工作,因为您的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 /
对我有效:你能提供一把小提琴来显示它是如何不起作用的吗?嘿@sticky bit我们在一个空表中创建这种类型的触发器有什么限制吗?对我来说似乎也不错。尝试用一个简单的
DBMS\u输出来替换RAISE\u APPLICATION\u ERROR
。放一行SELECT
看看你的SELECT是否工作正常?@Ajax:没有。但是看看hotfix的答案,这似乎很有道理。对我有用:你能提供一把小提琴来显示它是如何不起作用的吗?嘿@sticky bit我们在空表中创建这种类型的触发器有什么限制吗?对我来说似乎也很好。试着用一个简单的DBMS\u输出来替换RAISE\u APPLICATION\u ERROR
。把SELECT
放进去,看看你的SELECT是否工作正常?@Ajax:没有。但是看看hotfix的答案,这似乎很有道理。