2014-03-05 6 views
2

I이 버튼의 WHEN-BUTTON-PRESSED 트리거에 다음 코드양식은 오류 메시지와 캐치를 억제 FRM-40350

BEGIN 

SYNCHRONIZE; 
populate_maximo_records; 

END; 

TI는 블록에 채우는 모든 레코드가 없을 것이라는 시나리오가 될 것입니다. 레코드가 없으면 현재 다음과 같은 오류 메시지가 표시됩니다.

frm-40350 query caused no records to be retrieved 

대신 위의 메시지를 표시하지 않고 사용자 지정 메시지를 표시하고 싶습니다. 어떻게해야합니까? 당신은 메시지의 수준이 있습니다 : 시스템에서 메시지를 표시하지 않으려면 system.message_level을 사용할 수 있습니다

답변

1

0, 5, 10, 15, 20, 25,> 트리거에서 25

을, 당신은 지정할 수 있습니다 지정된 심각도 레벨 위의 메시지 만 양식을 통해 발행 된 입니다. 당신은 MESSAGE_LEVEL에 값을 할당하여이 작업을 수행 할

예 :

declare 
    old_message_level number; 
begin 
    :old_message_level := :system.message_level; 
    :system.message_level := 20; -- suppresses most errors 
    commit; -- action you want to do without messages or errors 
    :system.message_level := old_message_level; 
end; 

당신은 당신이 다음 경우 변수를 확인하여이 코드 뒤에 당신의 자신의 메시지를 보여 변수 또는 테이블에서 발생하는 오류를 누르고 있으면 오류가 발생했습니다.

+0

오류가 발생했는지 어떻게 확인합니까? 예 : 'frm-40350'과 커스텀 메세지를 표시 하시겠습니까? 그리고 어떤 방아쇠에? 형식 leverl, 블록 수준 또는 항목 수준? 감사합니다. – user75ponic

3

온 메시지 또는 온 오류 트리거를 사용하여 내부 양식 메시지 또는 오류를 트랩 할 수 있습니다. FRM-40350은 유익한 유형으로 분류되며 (양식 도움말에서 확인할 수 있음) On-Message 트리거에서 처리해야합니다.

IF message_code = 40350 THEN 
    Message('Your custom message'); 

ELSE 
    Message(message_type||'-'||TO_CHAR(message_code)||':'||message_text); 

END IF; 

당신이 예에서 다음 ELSE 문을 떠나 모든 다른 형태의 메시지를 숨 깁니다 그래서 만약 트리거 '에'암시 적 형태의 기능을 대체하는주의하십시오 메시지를 트래핑하는 코드는 다음과 같이해야합니다! On-Error 트리거를 사용하면 자체 메시지를 표시 한 후에 RAISe를 사용하는 것을 기억하는 것이 중요합니다. 그렇지 않으면 오류가 발생하지 않았으므로 양식이 계속됩니다!

IF error_code = 50026 THEN 
    Message('My Own message'); 
    RAISE FORM_TRIGGER_FAILURE; 

ELSE 
    Message(error_type||'-'||TO_CHAR(error_code)||':'||error_text); 
    RAISE FORM_TRIGGER_FAILURE; 

END IF; 
+0

감사합니다. 도움이되었습니다. – user75ponic

관련 문제