IF l_value = 'FALSE' THEN
RAISE_APPLICATION_ERROR(-20299, 'some error message');
END IF;
這是表觸發器的一部分。它應該返回一個錯誤號和消息,但當警報彈出時,它只返回消息號。沒有'錯誤信息'。什麼是錯的RAISE_APPLICATION_ERROR不返回消息
IF l_value = 'FALSE' THEN
RAISE_APPLICATION_ERROR(-20299, 'some error message');
END IF;
這是表觸發器的一部分。它應該返回一個錯誤號和消息,但當警報彈出時,它只返回消息號。沒有'錯誤信息'。什麼是錯的RAISE_APPLICATION_ERROR不返回消息
也許名字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而是你可以做任何你需要做的,以顯示任何你想要他顯示給用戶。
表單中的警報已由表單上的某些觸發代碼引發。看看你的ON-ERROR
觸發器 - 它有什麼代碼?
您可能需要增加它才能在警報中顯示DBMS_ERROR_TEXT
。
你使用什麼數據庫類型? MS SQL?甲骨文? MySQL的? – 2012-08-13 14:27:47
警報由客戶端呈現。所以你的問題是與客戶。 – APC 2012-08-13 14:41:00
我正在使用Oracle – 2012-08-13 14:42:12