在此處輸入影像描述 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:在“SCOTT.WEEKD_TRI”,第 3 行 ORA-04088:觸發器 'SCOTT,WEEKD_TRI 執行程序中出錯 你能告訴我為什么我會收到這個錯誤以及如何解決這個錯誤
* *在周六/周日進行時,此觸發器不應接受客戶付款,因此我撰寫了此觸發器,但是當我嘗試在 Sun 上插入資料時,它確實觸發了觸發器 ORA - 20000 無法在周末付款,我無法付款更新值但除此之外我得到了另外兩個 Erros ORA-06512 & ORA:04088 **
uj5u.com熱心網友回復:
沒有“錯誤”,除了您自己故意創建的錯誤。
今天是哪一天?
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>
uj5u.com熱心網友回復:
從您的螢屏截圖中,我看到有 3 條錯誤訊息行
- ORA-20000 - 這是由您的邏輯引起的真正錯誤訊息
- ORA-6512 - 識別代碼行的服務訊息發生錯誤
- ORA-4088 - 用于標識發生錯誤的觸發器名稱的另一條服務訊息
所以,你得到 ora-4088 的原因是你用于例外觸發的 raise_application_error 命令。它只是開發者服務訊息的一部分
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/324101.html
