IF l_value = 'FALSE' THEN
RAISE_APPLICATION_ERROR(-20299, 'some error message');
END IF;
これはテーブルトリガーの一部です。エラー番号とメッセージが返されるはずですが、アラートが表示されるとメッセージ番号のみが返されます。「エラーメッセージ」はありません。どうしたの
IF l_value = 'FALSE' THEN
RAISE_APPLICATION_ERROR(-20299, 'some error message');
END IF;
これはテーブルトリガーの一部です。エラー番号とメッセージが返されるはずですが、アラートが表示されるとメッセージ番号のみが返されます。「エラーメッセージ」はありません。どうしたの
フォームのアラートは、フォームのトリガー コードによって発生しました。トリガーを見てくださいON-ERROR
- トリガーにはどのようなコードがありますか?
DBMS_ERROR_TEXT
アラートに表示するには、それを拡張する必要がある場合があります。
名前RAISE_APPLICATION_ERROR
が誤解を招く可能性があります。GUIに何かがポップアップすることはありません。使用しているクライアントに応じて自分でプログラムすること。Put を使用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 の代わりに、ユーザーに見せたいものを表示するために必要なことは何でもできます。