【发布时间】:2011-12-21 19:56:20
【问题描述】:
大家好,我对 PL/SQL 有点陌生,所以有点困惑。我有一个名为 rec 的游标,在遍历它时我有两个嵌套的 IF 语句。
CURSOR Cur IS
SELECT Mil.Id,
Mil.Record_Num,
Mil.Status,
Mil.file_processed,
Mil.Updated_By
FROM status_log mil
WHERE Mil.file_processed != 'Processed'
For Update of Mil.file_processed;
FOR Rec IN Cur LOOP
IF (Rec.status = 'Ready' OR Rec.status = 'Go') THEN
IF Length(Rec.Zip) = 5 AND
(Substr(Rec.Zip, 1, 3) = '303' OR
Substr(Rec.Zip, 1, 3) = '304' ) THEN
l_state:= 'ATL';
END IF;
UPDATE status_log mil
SET file_processed = 'Processed'
WHERE current of cur
END IF;
COMMIT;
END LOOP;
现在,只要光标有一条记录满足第二条IF(即 Zip 长度为 5,代码以 303 或 304 开头),它就不会再针对该记录和之后的所有记录命中 update 语句.我什至尝试在IF 循环中的逻辑之后使用EXIT 语句,但无济于事。我做错了什么?
【问题讨论】:
-
请张贴光标和“做某事的代码”:)
-
您是否有可能抛出错误并静默退出? (即你的程序有
exception when others then null;) -
您好,代码可以做一些事情,我只是将变量设置为特定值。该代码不负责任,因为我将其注释掉并尝试使用空白块运行它,但同样的问题。编辑代码有点检查更新。
-
@Allan 我不会默默地扔掉和退出。
exception when others块中唯一的内容是通知该块已被命中但未命中异常。 -
@Eosphorus 我已经更新了我的答案。