在这里输入图像描述CREATE OR REPLACE TRIGGER weekd_tri
BEFORE INSERT OR UPDATE ON payment
FOR EACH ROW
BEGIN
IF TO_CHAR(SYSDATE, 'D') = '1' THEN
RAISE_APPLICATION_ERROR(-20000, 'Cannot make a payment on weekends');
END IF;
END;
错误味精ORA-06512: at "SCOTT.WEEKD_TRI",第3行ORA-04088:执行触发器'SCOTT,WEEKD_TRI时出错你能告诉我为什么我得到这个错误和如何解决这个错误吗
**这个触发器不应该接受客户在周六/周日付款,所以我写了这个触发器,但是当我试图在周日插入数据时,它确实触发了一个触发器ORA- 20000不能在周末付款,我无法更新值,但除此之外,我得到了另外两个错误ORA-06512 &奥拉:04088 * *
从你的屏幕截图中,我看到有3个错误消息行
- ORA-20000 -这是由你的逻辑引起的真实错误消息
- ORA-6512 -服务消息识别发生的代码行错误 ORA-4088 -另一个服务消息,以确定发生错误的触发器名称
所以,你得到ora-4088的原因是你用来触发异常的raise_application_error命令。它只是开发者服务消息的一部分
没有"错误",除了您自己故意创建的错误。
今天星期几?
SQL> select to_char(sysdate, 'D') from dual;
T
-
1 --> OK, that's the value you're checking in a trigger
SQL>
样本表:
SQL> create table payment (id number);
Table created.
触发:
SQL> create or replace trigger weekd_tri
2 before insert or update on payment
3 for each row
4 begin
5 if to_char(sysdate, 'D') = '1' then
6 raise_application_error(-20000, 'Cannot make a payment on weekends');
7 end if;
8 end;
9 /
Trigger created.
测试:
SQL> insert into payment (id) values (1);
insert into payment (id) values (1)
*
ERROR at line 1:
ORA-20000: Cannot make a payment on weekends
ORA-06512: at "SCOTT.WEEKD_TRI", line 3
ORA-04088: error during execution of trigger 'SCOTT.WEEKD_TRI'
;确切的你想做的事情:IF
得出结论,今天真的是'1'
,并引发了一个错误。
如果它是例如'2'
你检查,今天你可以插入一行:
SQL> create or replace trigger weekd_tri
2 before insert or update on payment
3 for each row
4 begin
5 if to_char(sysdate, 'D') = '2' then
6 raise_application_error(-20000, 'Cannot make a payment on weekends');
7 end if;
8 end;
9 /
Trigger created.
SQL> insert into payment (id) values (2);
1 row created.
SQL>