RAISE_APPLICATION_ERROR不返回消息

时间:2012-08-13 14:25:53

标签: oracle plsql oracleforms raise

IF l_value = 'FALSE' THEN
  RAISE_APPLICATION_ERROR(-20299, 'some error message');
END IF;

这是表触发器的一部分。它应该返回一个错误号和消息,但是当警告弹出时它只返回消息号。没有'一些错误信息'。什么错了

2 个答案:

答案 0 :(得分: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 Developer的输出。

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 :(得分:1)

表单中的某些触发器代码引发了表单中的警报。看看你的ON-ERROR触发器 - 它有什么代码?

您可能需要对其进行扩充,以便在警报中显示DBMS_ERROR_TEXT