穿越画圣:oracle for循环 用在 游标中
来源:百度文库 编辑:偶看新闻 时间:2024/05/10 08:22:46
游标FOR循环
在大多数时候我们在设计程序的时候都遵循下面的步骤:
1、打开游标
2、开始循环
3、从游标中取值
4、检查那一行被返回
5、处理
6、关闭循环
7、关闭游标
可以简单的把这一类代码称为游标用于循环。但还有一种循环与这种类型不相同,这就是FOR循环,用于FOR循环的游标按照正常的声明方式声明,它的优点在于不需要显式的打开、关闭、取数据,测试数据的存在、定义存放数据的变量等等。游标FOR 循环的语法如下:
--统计年级四个班级学生早退,迟到,请假 数量
--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)')
的一句语句。
在大多数时候我们在设计程序的时候都遵循下面的步骤:
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,其他加薪1000
DECLARE
CURSOR emp_cur IS
SELECT * FROM emp FOR UPDATE;
BEGIN
--统计年级四个班级学生早退,迟到,请假 数量
--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)')
的一句语句。
请问:在oracle中的过程中怎么返回一个游标?
[JSP]如何在For中,中断While的循环?
c语言中 for循环
在何处下载oracle for sco unix
C#.Net 中for循环的疑问!
在网页中怎么做对联广告和游标广告??
toad for oracle 与 oracle
用户在使用游标前若不清楚游标的状态,可以用什么来检查?
ODBC数据源管理器中无microsoft odbc for oracle
C++程序中永久循环是用“for(;;)”好还是“while()”好?
java 用for循环怎么写
有关Java中for循环语句的问题!
ASP中For…Next循环语句的问题
关于VB中一个FOR循环的问题。
关于VB中 For循环的一个问题。
又是VB中FOR循环的计算问题。
请教一道vb中for循环的习题
请教一道vb中for循环的习题
delphi 中给for自循环变量赋值
请问有关For循环
asp for循环文本框...
for循环的运用
关于 VB for循环
关于vb FOR 循环