2015-02-12 2 views
0

У меня проблема. Am делает функцию вставитьОбработка исключений - plsql

case f1.RFD_CATEGORY_CODE when'O1' then 'C1GBC' 
when 'O2' then 'C2GBC' else null end 

поле является обязательным и, таким образом, вместо того, чтобы нуль мне нужно, чтобы показать сообщение об ошибке, если код не принимает C1GBC или C2GBC. и если код принимает C1GBC или C2GBC, тогда показывается успешно как сообщение.

я есть создать исключение ниже, но я получаю ошибку

create or replace procedure CTP_CODE as 
declare 
--RFD_CAT_ERR varchar2; 
RFD_CAT_ERR EXCEPTION; 

begin 
    if RFD_CATEGORY_CODE is '01' then RFD_CATEGORY_CODE is 'C1GBC'; 
    DBMS_OUTPUT.PUT_LINE ('No1. Successful Operation'); 
    else 
     if RFD_CATEGORY_CODE is '02' then RFD_CATEGORY_CODE is 'C2GBC'; 
     DBMS_OUTPUT.PUT_LINE ('No2. Successful Operation'); 
     end if; 
raise RFD_CAT_ERR; 
end if; 
EXCEPTION 
when RFD_CAT_ERR then 
DBMS_OUTPUT.PUT_LINE ('Error message!'); 
end; 
/

ответ

1

Неправильный код тоже неправильно синтаксис .. Всякий раз, когда ваш код будет в состоянии еще он будет бросать ошибку, как после выполнения 2-го, если он пойдет на " поднять RFD_CAT_ERR; " частично и вызывать исключение. , так что u должен обрабатывать ошибку в elsif после второго. Если условие.

+0

спасибо, но вы можете привести пример? –

+1

если RFD_CATEGORY_CODE = '01', то RFD_CATEGORY_CODE: = 'C1GBC'; DBMS_OUTPUT.PUT_LINE ('No1. Successful Operation'); else , если RFD_CATEGORY_CODE равен '02', тогда RFD_CATEGORY_CODE является 'C2GBC'; DBMS_OUTPUT.PUT_LINE («№2. Успешная операция»); еще поднять RFD_CAT_ERR; end if; end if; –

1

Вы говорите, что поле является обязательным. Если под этим подразумевается, что поле в таблице ограничено как not null, тогда вам не нужно беспокоиться о повышении исключения. Оператор insert сделает это для вас. Все, что вам нужно сделать, это поймать его в обработчике исключений и использовать RAISE_APPLICATION_ERROR для возврата содержательного сообщения.

Сделайте это, а не попытайтесь напечатать сообщение об ошибке. Если ваша процедура вызывается пакетным процессом, ее не будет видно.

+0

Да, это следующий шаг для моего кода. Это полезно, спасибо :) –

0

Это работает для меня: D

CASE f1.RFD_CATEGORY_CODE 
     WHEN 'O1' THEN 'C1GBC' 
     WHEN 'O2' THEN 'C2GBC' 
    ELSE 'error' 

Затем поднимите ошибки за исключением

Смежные вопросы