异常处理-plsql

异常处理-plsql,plsql,Plsql,我有个问题。我在做一个插入函数 case f1.RFD_CATEGORY_CODE when'O1' then 'C1GBC' when 'O2' then 'C2GBC' else null end 该字段是必填字段,因此如果代码未采用C1GBC或C2GBC,则需要显示错误消息,而不是null。如果代码采用C1GBC或C2GBC,则将successful显示为消息 我在下面创建了一个异常,但出现错误 create or replace procedure CTP_CODE as declar

我有个问题。我在做一个插入函数

case f1.RFD_CATEGORY_CODE when'O1' then 'C1GBC'
when 'O2' then 'C2GBC' else null end
该字段是必填字段,因此如果代码未采用C1GBC或C2GBC,则需要显示错误消息,而不是null。如果代码采用C1GBC或C2GBC,则将successful显示为消息

我在下面创建了一个异常,但出现错误

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;
/

错误的代码和错误的语法。。 无论何时代码处于else状态,它都会在执行第二个后抛出错误,如果它将转到“raise RFD_CAT_ERR;”部分并引发异常。
因此,您应该在第二个If条件之后处理elsif中的错误。

您说该字段是必需的。如果这意味着表中的字段被约束为
notnull
,那么就不必担心引发异常。insert语句将为您执行此操作。您所要做的就是在异常处理程序中捕获它,并使用RAISE\u APPLICATION\u ERROR返回有意义的消息

这样做,而不是试图打印错误消息。如果批处理过程调用了您的过程,那么将没有人看到它。

这对我来说很有效:D

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

然后针对异常引发任何错误

如果RFD_类别_代码='01',则RFD_类别_代码='C1GBC';DBMS_OUTPUT.PUT_LINE('No1.Successful Operation');否则,如果RFD_类别代码为'02',则RFD_类别代码为'C2GBC';DBMS_OUTPUT.PUT_LINE('No2.Successful Operation');否则将引发RFD_CAT_错误;如果结束;如果结束;是的,这是我代码的下一步。这很有帮助,谢谢:)