我正在将TSQL存储过程迁移到PL/SQL并遇到问题 - Oracle 10g中缺少CONTINUE关键字.
我已经读过Oracle 11g将其作为一项新功能,但不幸的是,升级不是一种选择.
在10g中还有CONTINUE的替代品吗?我认为将SP的逻辑重构为一种解决办法是不切实际的,因为我有一个外部循环,一个IF,然后一个嵌套的IF,然后是该IF中语句块末尾的CONTINUE.
任何帮助都会非常感激,欢呼.
jop*_*jop 56
您可以使用goto和标签模拟继续.
DECLARE
done BOOLEAN;
BEGIN
FOR i IN 1..50 LOOP
IF done THEN
GOTO end_loop;
END IF;
<<end_loop>> -- not allowed unless an executable statement follows
NULL; -- add NULL statement to avoid error
END LOOP; -- raises an error without the previous NULL
END;
Run Code Online (Sandbox Code Playgroud)
小智 10
虽然它有点复杂而且只是假的,但你可以这样使用异常:
DECLARE
i NUMBER :=0;
my_ex exception;
BEGIN
FOR i IN 1..10
LOOP
BEGIN
IF i = 5 THEN
raise my_ex;
END IF;
DBMS_OUTPUT.PUT_LINE (i);
EXCEPTION WHEN my_ex THEN
NULL;
END;
END LOOP;
END;
Run Code Online (Sandbox Code Playgroud)
事实上,PL SQL确实有一些东西可以取代CONTINUE.您所要做的就是在循环中添加标签(名称):
declare
i integer;
begin
i := 0;
<<My_Small_Loop>>loop
i := i + 1;
if i <= 3 then goto My_Small_Loop; end if; -- => means continue
exit;
end loop;
end;
Run Code Online (Sandbox Code Playgroud)
对于将来的搜索,在oracle 11g中他们添加了一个continue语句,可以像这样使用:
SQL> BEGIN
2 FOR i IN 1 .. 5 LOOP
3 IF i IN (2,4) THEN
4 CONTINUE;
5 END IF;
6 DBMS_OUTPUT.PUT_LINE('Reached on line ' || TO_CHAR(i));
7 END LOOP;
8 END;
9 /
Reached on line 1
Reached on line 3
Reached on line 5
PL/SQL procedure successfully completed.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
82164 次 |
| 最近记录: |