ORACLE中的WHILE语句的判断条件处报错

fengzhou8417 2010-05-01 12:52:51
我要实现的是WHILE 表不为空 LOOP,环境是PL/SQL中的一个存储过程

这里我写的是while (select count(*) from nodecal)>0 loop

但是PL/SQL总是报错,PLS-00103: 出现符号“SELECT”在需要下列之一时。。。

不知道是否我的语法有问题,那么想实现这样的功能该怎么写呢?谢谢了。
...全文
421 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tangren 2010-05-01
  • 打赏
  • 举报
回复
上面有误
create or replace procedure p_test is
n number;
begin
select count(*) into n from nodecal;
while n>0 loop
null;--你的语句
end loop;
end;
tangren 2010-05-01
  • 打赏
  • 举报
回复
create or replace p_test
n number;
begin
select count(*) into n from nodecal;
while n>0 loop
...............
end loop;
xieyu_zy 2010-05-01
  • 打赏
  • 举报
回复
楼主以前应该是用SQL SERVER的,SQL SERVER可以这样写的,可以将SQL语句放入IF 判定或者WHILE循环条件的判定中,ORACLE对于这种是不允许的。

你可能每次循环的时候都要去获取一次COUNT觉得很烦,但是这个ORACLE的规矩,其实只是写法上不一样,你那种写法即使成立也是每次需要去提取一次,所以在ORACLE里面一般来说你如果直接使用WHILE循环就需要在循环外面写一次COUNT,循环里面还要写错一次COUNT,估计你的count应该是在不断变化中的(注意程序不要走入死循环了,这个根据实际情况去判定)

方法1:在循环外面获取一次COUNT,循环里面结束后还要获取一次,以得到最新的COUNT用以下一次WHILE判定。

declare
n number;
loop
BEGIN
select count(*) into n from nodecal;
while n>0 loop
...............执行代码片段
select count(*) into n from nodecal;
end loop;
END;


方法2:只在循环内部控制,强制跳出即可:

declare
n number;
BEGIN
loop
select count(*) into n from nodecal;
EXIT WHEN n<=0;--每次获取到的N判定如果小于等于0,则跳出循环
.....代码片段部分
end loop;
END;
fengzhou8417 2010-05-01
  • 打赏
  • 举报
回复
非常感谢您的帮助,我的这张表是一张临时表,现在执行关于它的查询时总是是表或视图不存在,不知道是哪里出了问题。
[Quote=引用 2 楼 tangren 的回复:]
上面有误

SQL code
create or replace procedure p_test is
n number;
begin
select count(*) into n from nodecal;
while n>0 loop
null;--你的语句
end loop;
end;
[/Quote]
tangren 2010-05-01
  • 打赏
  • 举报
回复
建议楼主看一看书,下面这本PL/SQL书不错的,并且网上有电子书
精通Oracle 10g PL/SQL编程
心中的彩虹 2010-05-01
  • 打赏
  • 举报
回复

declare
v_num number;
begin
select count(*) into v_num from nodecal;
while v_num>0 loop
.....
end loop;
end;

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧