2012-08-13 63 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