【发布时间】: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;