我在执行触发器语句时收到错误



在这里输入图像描述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>

最新更新