+ -
当前位置:首页 → 问答吧 → 刚接触oracle,问个存储过程中loop用法的问题

刚接触oracle,问个存储过程中loop用法的问题

时间:2007-10-25

来源:互联网

我想问一下loop是做什么用的,一般有
for in  
loop
....
end loop
这样用的,但我还看到  
BEGIN
  v_Startdate:=trunc(p_StartDate);
  v_EndDate:=trunc(p_EndDate+1);
  v_Hour := 0;
  --清空指定时间段内的数据
  delete from csuseraccessnumdaystat where
  statdate>=v_StartDate and statdate<v_EndDate;
  COMMIT;
  v_EndDate:=trunc(p_StartDate+1);
  LOOP
  IF v_EndDate>p_Enddate+1 THEN
  EXIT;
  END IF;

  LOOP
IF v_Hour>23 THEN
v_Hour :=0;
EXIT;
........
  END LOOP
  END LOOP
我想问一下,上边的这种用法,loop起什么作用

作者: xujiangpan   发布时间: 2007-10-25

loop
end loop 
就是做循环,如果没有EXIT,就会一直做循环

作者: hebo2005   发布时间: 2007-10-25

LOOP 
IF v_Hour >23 THEN 
v_Hour :=0; 
EXIT; 
........ 
END LOOP
循环,如果v_Hour >23 则v_Hour :=0;并EXIT;退出

作者: rockywu   发布时间: 2007-10-25

用了两个loop做的嵌套循环

LOOP 
  IF v_EndDate >p_Enddate+1 THEN 
  EXIT; 
  END IF; 

  LOOP 
  IF v_Hour >23 THEN 
  v_Hour :=0; 
  EXIT; 
  ........ 
  END LOOP 
END LOOP 
不过你这个中间好像没什么东西可循环的。。。那里抄来的

作者: zkaini   发布时间: 2007-10-25

BEGIN 
  v_Startdate:=trunc(p_StartDate); 
  v_EndDate:=trunc(p_EndDate+1); 
  v_Hour := 0; 
执行到这里是为变量赋值。。。

--清空指定时间段内的数据 
  delete from csuseraccessnumdaystat where 
  statdate >=v_StartDate and statdate <v_EndDate; 
  COMMIT; 
执行到这里删除了v_StartDate和v_EndDate之间的数据,并提交了事务

  v_EndDate:=trunc(p_StartDate+1); 
  LOOP 
  IF v_EndDate >p_Enddate+1 THEN 
  EXIT; 
  END IF; 

  LOOP 
IF v_Hour >23 THEN 
v_Hour :=0; 
EXIT; 
........ 
  END LOOP 
  END LOOP 
不知道代码是不是没有贴完还是怎么的,这2个循环没什么用,感觉在提交事务那里,工作已做完了。。。
有错误,欢迎大家来讨论。。。

作者: sanmmu   发布时间: 2007-10-25

少付值的吧,那样不报错吗?

作者: theokobe   发布时间: 2008-11-10

Loop 循环
  if 判断(如果为true则 exit)
  exit

  end if (如果为false 则从新判断)
end Loop (如果碰到了exit 就结束循环,没有没有的话就继续循环)


  我是一个初学者(Oracle) 我看了上面各位大侠的评论总结出来的,希望有什么不对的地方可以给我指出来!谢谢了!

作者: zhoudianzhang   发布时间: 2011-11-15

这个写个存储过程,验证一下就OK!

作者: cosio   发布时间: 2011-11-15

热门下载

更多