【问题标题】:Exception inside if condition in plsqlplsql中的if条件内部异常
【发布时间】:2018-11-17 07:29:11
【问题描述】:

我有一个用于将员工数据从临时表插入到主表的游标。我有一个场景,首先它会检查主部门表中是否存在临时表部门ID;如果DeptId 不存在,则不要插入员工并更新临时表中的 ERR_MSG 列。我在 INSERT 语句之后的 if 条件中处理异常,但它给了我一个类似

的错误

在期望以下之一时遇到符号 EXCEPTION:开始、结束、大小写、其他......

示例代码如下:-

DECLARE
 --var list

    BEGIN
     OPEN ltempCur For

         -- here i am selecting cols from temp table in variables

     LOOP
        FETCH ltempCur 
     INTO 
       --all the declared variables here
     EXIT
    WHEN ltempCur %NOTFOUND;
    BEGIN

     --select statement for checking if employee record exist in table

     IF(lExist == 0)  --if emloyee record not exist
     THEN

       begin
         --check if dept exist in dept table if not exist then i have assigned zero to deptid variable in NO_DATA_FOUND exception
       end;

       IF(vardeptid > 0)  --if condition for which i have mentioned in description

       --Insert statement for employee

       EXCEPTION
       WHEN OTHERS
       THEN
           --handling exp
       COMMIT;
    END;         

       END IF; -- dept id check if end

     --end loop -- close cursor

在上面的代码中,如果我删除deptid IF ELSE 条件,那么它工作正常,但是在那个 IF 条件下它会给出错误

【问题讨论】:

  • 您不应该在IF.. END IF 中放置EXCEPTION 部分。如果您想在满足条件时引发用户定义的异常,请使用RAISE 语句。 EXCEPTION 部分应该在 BEGIN..END 的末尾,并且可以处理或重新引发所需的异常。
  • 我想检查员工插入是否成功,这就是为什么我在员工的插入语句之后写了EXCEPTION,我可以在插入后检查行数并在END IF之后如果它为零则引发异常?
  • 如果您想要一个特定的异常处理程序来插入员工记录,那么您需要将该插入语句框在适当的块中:BEGIN insert ... EXECPTION ... END;

标签: oracle plsql


【解决方案1】:

如果针对两个 IF 子句,则只有一个结尾。可能您还没有结束变量 lExists 的 IF 子句。

【讨论】:

  • 我已经结束了,jst在上面的示例代码中没有提到。
  • 好的。所有 IF 子句都必须在它们开始时所在的相同 begin end 块内结束
  • 是的,我正在这样做,如果我注释掉 IF 和 END IF 的部门存在,那么代码工作正常,我想我必须在部门存在的情况下引发异常,然后在最后处理它,必须谷歌一些东西:-D
  • 不是真的,我相信。您可以在开始部分的 end 之前放置一个异常处理程序,您可以在其中检查 dept 是否存在于 dept 表中。
  • 我已经结束了,只是上面的示例代码中没有提到 - 那么我们要在这里修复什么代码?
猜你喜欢
  • 1970-01-01
  • 2012-10-24
  • 1970-01-01
  • 2019-07-30
  • 1970-01-01
  • 1970-01-01
  • 2012-01-04
  • 1970-01-01
相关资源
最近更新 更多