小弟在PRO*C的官方文档中看到,如果在PL/SQL中使用游标的话就不需要使用DECLARE,OPEN,FETCH,CLOSE这些语句,而是使用一个游标FOR循环,例如:DECLARE
...
BEGIN
FOR emprec IN (SELECT empno, sal, comm FROM emp) LOOP
IF emprec.comm / emprec.sal > 0.25 THEN ...
...
END LOOP;
END;
(例中的‘.'表示引用记录中的字段)
小弟对这样的游标操作感觉很诧异,哪位老大能给讲解一下呢?
...
BEGIN
FOR emprec IN (SELECT empno, sal, comm FROM emp) LOOP
IF emprec.comm / emprec.sal > 0.25 THEN ...
...
END LOOP;
END;
(例中的‘.'表示引用记录中的字段)
小弟对这样的游标操作感觉很诧异,哪位老大能给讲解一下呢?
解决方案 »
- 为什么我的PL-SQL老是打不开
- 帮个忙,帮我看看这段触发器代码!!
- 关于表空间的问题。
- 请问在oracel中怎样给一个时间增加小时,分,秒
- 在Oracle中应该用什么来替换SQLXMLOLEDB.3.0
- ERROR:ORA-12514: TNS:listener does not currently know of service requested in connect
- 求一个oracle的查询语句
- 有没有在oracle9.2下用过$ORACLE_HOME/bin/dbstart和dbshut脚本进行数据库的启动和关闭呀?
- 时间紧急,麻烦各位大侠给个建议~~~~~~~~~
- 用C++Builder从ORACLE中取数据,如此奇怪?
- 请教:oracle中比较数据库中两个用户结构的差异
- 怎样给存储过程传递数组参数
游标 cursor:查询返回的结果集 1、静态游标,与定义好的查询关联; a、显式游标
type t_type is record( -- 定义保存结果的类型
pk t.pk%type
,name1 t.name1%type
,name2 t.name2%type
);
v_t t_type; -- 定义结果变量,行记录。当然也可以不这样定义,而一个个指定字段变量。
cursor c for select * from t where pk=1; -- 静态游标:1、定义游标
open c; -- 静态游标:2、打开游标
fetch c into v_t; --
while c%FOUND loop -- 静态游标:3、遍历游标
fetch c into v_t;
[ some DML ... with v_t.pk,v_t.name1,v_t.name2 ... ]
end loop;
close c; -- 静态游标:4、关闭游标
b、隐式游标
for x in (select * from t where pk=t) loop -- 隐式游标,相对于显示游标,结构简单,推荐使用
[ some DML ...with x.pk,x.name1,x.name2 ... ]
end loop;
2、动态游标:ref cursor 查询语句可以动态指定 a、弱类型游标
type refcur_t is ref cursor; -- 弱游标类型定义不指定具体的返回类型 refcur refcur_t; -- 弱游标变量
---- 使用方式同显示静态游标:
open refcur for select ... ; -- 关联查询(可以多次关联不同的查询)
fetch refcur into ...
while refcur%FOUND loop
...
end loop;
close refcur;
---- b、强类型游标
type emp_refcur_t is ref cursor return employees%rowtype; -- 指定返回类型 使用方式同上