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

이것은 테이블 트리거의 일부입니다. 그것은 나에게 오류 번호와 메시지를 반환해야하지만 경고가 튀어 나오면 메시지 번호 만 반환됩니다. '일부 오류 메시지'가 없습니다. 뭐가 잘못RAISE_APPLICATION_ERROR는 메시지를 반환하지 않습니다.

+0

어떤 데이터베이스 유형을 사용하고 있습니까? MS SQL? 신탁? MySQL은? –

+2

경고는 클라이언트에 의해 렌더링됩니다. 문제는 클라이언트와 관련이 있습니다. – APC

+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에서 당신에게 결과를 가져올 것이다 * 플러스 또는 그런 종류의 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을 표시하려면 기능을 보강해야 할 수도 있습니다.