oracle for 数字循环,oracle for循环 用在 游标中

游标FOR循环在大多数时候我们在设计程序的时候都遵循下面的步骤:

1、打开游标

2、开始循环

3、从游标中取值

4、检查那一行被返回

5、处理

6、关闭循环

7、关闭游标

可以简单的把这一类代码称为游标用于循环。但还有一种循环与这种类型不相同,这就是FOR循环,用于FOR循环的游标按照正常的声明方式声明,它的优点在于不需要显式的打开、关闭、取数据,测试数据的存在、定义存放数据的变量等等。游标FOR 循环的语法如下:

--游标for循环(给所有的部门经理减薪1000)DECLARE

CURSOR emp_cur IS

SELECT empno,ename,sal FROM emp WHERE job='MANAGER' FOR UPDATE;

BEGIN

FOR emp_row IN emp_cur

LOOP

UPDATE emp SET sal=sal-1000 WHERE CURRENT OF emp_cur;

END LOOP;

COMMIT;

END;

--我们可以看到游标FOR循环确实很好的简化了游标的开发,我们不在需要open、fetch和close语句,不在需要用%FOUND属性检测是否到最后一条记录,这一切Oracle隐式的帮我们完成了。--给经理加薪5000,其他加薪1000DECLARE

CURSOR emp_cur IS

SELECT * FROM emp FOR UPDATE;

BEGINFOR emp_row IN emp_curLOOPIF emp_row.job='MANAGER' THENUPDATE emp SET sal=sal+5000 WHERE CURRENT OF emp_cur;

ELSEUPDATE emp SET sal=sal+1000 WHERE CURRENT OF emp_cur;END IF;END LOOP;END;--还有一种是语句嵌套:

--统计年级四个班级学生早退,迟到,请假 数量

--LB字段为“类别”就是指早退,迟到,请假;LBB“类别表”不同类别对应的表;LB,LBB这两个字段又在 t_kq_lbb表中

--t_port_kqtj 为统计的数据放在 这张表中create or replace procedure sp_kqtj as

ls_truncate varchar(100);

ls_sql varchar(1000);

begin

ls_truncate := 'TRUNCATE TABLE t_port_kqtj';

EXECUTE IMMEDIATE ls_truncate;

FOR ls_sj in (select ' INSERT INTO t_port_kqtj VALUES(' || '''' ||

trim(LB) || '''' || ', ( SELECT COUNT(*) FROM ' ||

trim(LBB) || ') , ' || '''' || trim(LBB) || '''' || ')' LS

from t_kq_lbb ) LOOP

begin

ls_sql := ls_sj.ls;

EXECUTE IMMEDIATE ls_sql;

EXCEPTION

WHEN OTHERS THEN

ls_truncate := '1';

end;

end loop;

commit;

end;其中 || 为联接符,‘’‘’ 为一个单引号,

' INSERT INTO t_port_kqtj VALUES(' || '''' ||

trim(LB) || '''' || ', ( SELECT COUNT(*) FROM ' ||

trim(LBB) || ') , ' || '''' || trim(LBB) || '''' || ')'

就可以看成:

INSERT INTO t_port_kqtj VALUES(' trim(LB) ', ( SELECT COUNT(*) FROM trim(LBB) ) , ' trim(LBB)')

的一句语句。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值