2012-08-13 121 views
0
IF l_value = 'FALSE' THEN 
    RAISE_APPLICATION_ERROR(-20299, 'some error message'); 
END IF; 

這是表觸發器的一部分。它應該返回一個錯誤號和消息,但當警報彈出時,它只返回消息號。沒有'錯誤信息'。什麼是錯的RAISE_APPLICATION_ERROR不返回消息

+0

你使用什麼數據庫類型? MS SQL?甲骨文? MySQL的? – 2012-08-13 14:27:47

+2

警報由客戶端呈現。所以你的問題是與客戶。 – APC 2012-08-13 14:41:00

+0

我正在使用Oracle – 2012-08-13 14:42:12

回答

1

也許名字RAISE_APPLICATION_ERROR是誤導你。它不會在GUI上彈出一些東西。您根據您使用的客戶端進行編程。讓你可以使用RAISE_APPLICATION_ERROR來創建你自己的SQL錯誤,你在其上採取行動。

-- a example table 
create table mytest (col_a number, col_b char(20)); 

-- a example trigger 
CREATE OR REPLACE TRIGGER mytest_before 
BEFORE UPDATE 
    ON mytest 
    FOR EACH ROW 
DECLARE 
BEGIN 
    if :new.col_a < 0 then 
     RAISE_APPLICATION_ERROR(-20299, 'negative value not allowed for column A'); 
    end if; 
END; 

insert into mytest values (1,'hallo'); 

set serveroutput on 
DECLARE 
    negative_value EXCEPTION; -- declare exception 
    PRAGMA EXCEPTION_INIT (negative_value, -20299); -- assign error code to exception 
BEGIN 
    update mytest set col_a = -1 where col_b = 'hallo'; 
EXCEPTION 
    WHEN negative_value THEN -- handle exception 
    -- do whatever you need to do to bring the error to the user 
    DBMS_OUTPUT.PUT_LINE(TO_CHAR(SQLERRM(-20299))); 
END; 
/

上面會帶給你在SQL輸出* Plus或諸如此類的SQL開發人員。

table MYTEST created. 
TRIGGER mytest_before compiled 
1 rows inserted. 
anonymous block completed 
ORA-20299: negative value not allowed for column A 
ORA-06512: at "DEMO.MYTEST_BEFORE", line 4 
ORA-04088: error during execution of trigger 'DEMO.MYTEST_BEFORE 

DBMS_OUTPUT.PUT_LINE而是你可以做任何你需要做的,以顯示任何你想要他顯示給用戶。

1

表單中的警報已由表單上的某些觸發代碼引發。看看你的ON-ERROR觸發器 - 它有什麼代碼?

您可能需要增加它才能在警報中顯示DBMS_ERROR_TEXT