异常处理 - plsql

时间:2015-02-12 07:21:33

标签: plsql

我有问题。我正在做插入功能

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

该字段是必填字段,因此如果代码未采用C1GBC或C2GBC,则需要显示错误消息而不是null。如果代码采用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;
/

3 个答案:

答案 0 :(得分:1)

错误的代码也错误的语法.. 每当你的代码进入else条件时,它将抛出错误,因为它将执行2nd,如果它将转到“raise RFD_CAT_ERR;”部分并提出例外。 所以你应该在第二个If条件之后处理elsif中的错误。

答案 1 :(得分:1)

你说该字段是强制性的。如果你的意思是表中的字段被限制为not null,那么你不必担心引发异常。 insert语句将为您完成。您所要做的就是在异常处理程序中捕获它并使用RAISE_APPLICATION_ERROR返回有意义的消息。

这样做而不是尝试打印错误消息。如果您的程序是由批处理程序调用的,那么就没有人可以看到它。

答案 2 :(得分:0)

这对我有用:D

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

然后引发异常

的任何错误