游标
来源:互联网 发布:icmo是tcp的哪个端口 编辑:程序博客网 时间:2024/06/05 07:46
定义游标:CURSOR cursor_name IS select_statement;
1.定义游标时不用包含INTO子句。2.如果处理数据时要按照一定的顺序,就需要在定义中的SELECT语句中使用ORDER BY子句。
打开游标: OPEN cursor_name;
1.打开游标时,数据库会运行相应的SELECT语句,并将结果集放在相应的程序区中。
2.如果SELECT语句没有检索到复合条件的行,也不会引发任何异常。
3.使用游标的属性来测试取数据后游标的相关信息。
从游标中去数据:
FETCH cursor_name INTO [variable1,....];
1.将当前行提取到输出变量中。
2.输出变量与游标中的SELECT列必须匹配数据和数据类型。
3.测试游标是否包含数据。
关闭游标:1.数据处理完成后要关闭游标。
2.如果需要,可以重新打开游标。
3.游标被关闭以后就不能再从该游标中提取数据。
显式游标的属性:
%ISOPEN 打开游标时为TRUE,否则为FALSE
%NOTFOUND 最近没有取到数据时为TRUE,否则为FALSE。
%FOUDN 最近取到数据时为TRUE,否则为FALSE,与%NOTFOUND的值相反。
%ROWCOUNT到当前位置总共从游标中取到的行数。
游标FOR循环例子:
DECLARE
CURSOR c1 IS
SELECT emno, emname
FROM em;
BEGIN
FOR em_r IN c1 LOOP
if em_r.emno = xxxx THEN
END LOOP;
END;
带参数的游标:
CURSOR cursor_name
[(parameter_name datatype,...)]
IS
select_statement;
例子:
DECLARE
CURSOR c1
(v_no number, v_job VARCHAR2) IS
SELECT emno, emname
FROM em
BEGIN
OPEN c1(10, 'click');
...
FOR UPDATE子句:
DECLARE
CURSOR c1 IS
SELECT emno, ename
FROM em
FOR UPDATE NOWAIT;
WHERE CURRENT OF 子句:WHERE CURRENT OF cursor
1.使用游标修改或删除当前正在处理的行。
2.使用FOR UPDATE子句在打开游标的查询语句中先锁定查询到的数据。
3.使用WHERE CURRENT OF子句来引用当前处理的游标中的数据行。
例子:
DECLARE
CURSOR c1 IS
SELECT ...
FOR UPDATE NOWAIT;
BEGIN
..
FOR em_r IN c1 LOOP
UPDATE...
WHERE CURRENT OF c1;
...
END LOOP;
COMMIT;
END;
带子查询的游标:
DECLARE
CURSOR my_c IS
SELECT t1.depno, dname, STAFF
FROM dep t1, (SELECT depno,
count(*) STAFF
FROM em
GROUP BY depno) t2
WHERE t1.depno = t2.depno
AND STAFF >= 5;
- 游标
- 游标
- 游标
- 游标
- 游标
- 游标
- 游标
- 游标
- 游标
- 游标
- 游标
- 游标
- 游标
- 游标
- 游标
- 游标
- 游标
- 游标
- 关于mini2440开发板USB转串口乱码问题
- spring hessian 配置
- 舌尖上的中国
- POI创建Excel
- 美团网CEO王兴:创业十年屡败屡战 终成硕果
- 游标
- 高斯滤波理解
- Using the jQuery Validate Plugin with HTML5 Data Attribute Rules
- 微信公众平台开发入门教程
- 适配器模式
- iPhone、iPad强制关机
- Form表单提交参数类型与后台实体参数类型的问题
- 一个笨方法,获取wireshark抓包中的中文内容
- 好书推荐:《Google.Android开发入门与实战》