我想要一个代码示例。
我试试这个:
DECLARE
var NUMBER;
BEGIN
/*N.B. for loop variables in pl/sql are new declarations, with scope only inside the loop */
FOR var IN 0 .. 10 LOOP
DBMS_OUTPUT.put_line(var);
END LOOP;
IF (var IS NULL) THEN
DBMS_OUTPUT.put_line('var is null');
ELSE
DBMS_OUTPUT.put_line('var is not null');
END IF;
END;
并且没有输出(虽然我知道它不是无限循环)。 为什么这个不打印?
编辑:非打印代码是通过数据库管理器界面修复的。
答案 0 :(得分:12)
没有EXIT语句的LOOP是在PL / SQL中生成无限循环的一种方法
BEGIN
LOOP
null;
END LOOP;
END;
您还可以编写永不结束的WHILE循环
BEGIN
WHILE( true )
LOOP
NULL;
END LOOP;
END;
答案 1 :(得分:5)
如果您的问题是没有输出,那么您可能还没有启用DBMS OUTPUT。你可以用:
来做到这一点set serveroutput on
答案 2 :(得分:3)
包含DBMS_OUTPUT.PUT_LINE的循环不会是无限的(如果启用了serveroutput),最终它将填充整个输出缓冲区或可用内存。过去的限制大约是1百万字节,所以会很快受到影响。如果要填满整个计算机内存,可能需要一段时间。
在无限循环中,我经历了一个忘记转到表中下一个元素的坏补丁。
DECLARE
type typ_tab is table of varchar2(10) index by pls_integer;
t_tab typ_tab;
v_ind number;
BEGIN
t_tab(10) := 'A';
t_tab(20) := 'B';
v_ind := t_tab.first;
WHILE v_ind IS NOT NULL LOOP
dbms_output.put_line(t_tab(v_ind));
v_ind := t_tab.next(v_ind); --Forget this and it loops forever
END LOOP;
END;
一旦他们进入这样的循环,会话可能需要被DBA杀死。
答案 3 :(得分:2)
不知道你为什么需要它,但是:
BEGIN
WHILE 1 = 1
LOOP
NULL;
END LOOP;
END;