我有一个在循环内执行的提取.如果这个获取失败(没有数据),我想CONTINUE循环到下一个记录EXCEPTION.
这可能吗?
我得到一个ORA-06550&PLS-00201 identifer CONTINUE must be declared
DECLARE
v_attr char(88);
CURSOR SELECT_USERS IS
SELECT id FROM USER_TABLE
WHERE USERTYPE = 'X';
BEGIN
FOR user_rec IN SELECT_USERS LOOP
BEGIN
SELECT attr INTO v_attr
FROM ATTRIBUTE_TABLE
WHERE user_id = user_rec.id;
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- user does not have attribute, continue loop to next record.
CONTINUE;
END;
END LOOP;
END;
Run Code Online (Sandbox Code Playgroud)
DCo*_*kie 10
在您提供的构造中,您不需要CONTINUE.一旦处理了异常,就会执行END之后的语句,假设您的EXCEPTION块没有终止该过程.换句话说,它将继续到user_rec循环的下一次迭代.
您还需要在BEGIN块中选择SELECT INTO变量:
SELECT attr INTO v_attr FROM attribute_table...
Run Code Online (Sandbox Code Playgroud)
显然你必须声明v_attr ......
怎么样的ole goto声明(我知道,我知道,但它在这里工作得很好;)
DECLARE
v_attr char(88);
CURSOR SELECT_USERS IS
SELECT id FROM USER_TABLE
WHERE USERTYPE = 'X';
BEGIN
FOR user_rec IN SELECT_USERS LOOP
BEGIN
SELECT attr INTO v_attr
FROM ATTRIBUTE_TABLE
WHERE user_id = user_rec.id;
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- user does not have attribute, continue loop to next record.
goto end_loop;
END;
<<end_loop>>
null;
END LOOP;
END;
Run Code Online (Sandbox Code Playgroud)
当然,只需将end_loop放在循环的最后.null可以用提交替换,也可以用计数器增量替换,由你决定.
| 归档时间: |
|
| 查看次数: |
118760 次 |
| 最近记录: |