博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oracle 显式游标
阅读量:7018 次
发布时间:2019-06-28

本文共 2690 字,大约阅读时间需要 8 分钟。

hot3.png

  • 1.语法 
CURSOR cursor_name[(parameter_name datatype,...)]IS select_statement;  --游标关联的SELECT语句,该语句不能使用SELECT...INTO...语句
  • 使用步骤

1.声明游标

DECLARE CURSOR cursor_nameIS SELECT_STATEMENT

 2.打开游标

OPEN cursor_name

3.读取数据:读取数据需要利用FETCH语句完成,但是FETCH只能取出当前行的记录,正常情况下FETCH要和循环语句一起使用,这样指针会不断前进,直到某个条件不符合要求而退出.使用FETCH时,游标属性%ROWCOUNT会不断累加.

FETCH cursor_name INTO record_name

4.关闭游标

CLOSE cursor_name

5.例

DECLARE  CURSOR pdct_cur  IS SELECT * FROM productinfo;  cur_prodrcd productinfo%ROWTYPE;BEGIN  OPEN pdct_cur;     FETCH pdct_cur INTO cur_prodrcd;     DBMS_OUTPUT.PUT_LINE(cur_prodrcd.productid || '-' || cur_prodrcd.productname);  CLOSE pdct_cur;END;
  • 显示游标的属性

1.%ISOPEN:判断游标是否打开,打开则返回true

2.%FOUND:检测行数据是否有效,有效则返回true

3.%NOTFOUND:

4.%ROWCOUNT:累计到当前为止使用FETCH提取数据的行数

  • 游标的使用技巧

1.游标中使用LOOP

DECLARE  CURSOR pdct_loop_cur  IS SELECT productid,productname,productprice  FROM productinfo  WHERE productprice>2500;  cur_productid productinfo.productid%TYPE;  cur_productname productinfo.productname%TYPE;  cur_productprice productinfo.productprice%TYPE;BEGIN  OPEN pdct_loop_cur;     LOOP       FETCH pdct_loop_cur INTO cur_productid,cur_productname,cur_productprice;       EXIT WHEN pdct_loop_cur%NOTFOUND;       DBMS_OUTPUT.PUT_LINE('产品ID' || cur_productid);     END LOOP;  CLOSE pdct_loop_cur;END;

2.使用BULK COLLECT和FOR语句:通常使用FETCH...INTO...语句提取数据,这种方式是单条提取数据,在数据量很大的情况下执行的效率不是很理想。而FETCH...BULK COLLECT INTO语句可以批量提取数据。

DECLARE  CURSOR pdct_collect_cur  IS SELECT * FROM productinfo;  TYPE pdct_tab IS TABLE OF productinfo%ROWTYPE;  pdct_rd pdct_tab;BEGIN  OPEN pdct_collect_cur;     LOOP       FETCH pdct_collect_cur BULK COLLECT INTO pdct_rd LIMIT 2;       FOR i IN 1..pdct_rd.COUNT LOOP           DBMS_OUTPUT.PUT_LINE('产品ID' || pdct_rd(i).productid);       EXIT WHEN pdct_collect_cur%NOTFOUND;       END LOOP;     END LOOP;  CLOSE pdct_collect_cur;END;

3.CURSOR FOR LOOP:不需要特别的声明变量,它可以提取出行对象类型的数据

DECLARE  CURSOR cfl IS      SELECT productname,productprice FROM productinfo;BEGIN  FOR curcfl IN cfl             --curcfl不需要声明,它可以提取出行对象的类型的数据,是一个%ROWTYPE类型  LOOP    DMS_OUTPUT.PUT_LINE('名称: ' || curcfl.productname);  END LOOP;END;
  • 带参的游标
DECLARE  cur_productid productinfo.productid%TYPE := '0240';  cur_productprice productinfo.productprice%TYPE := 1200;  cur_prodrcd productinfo%ROWTYPE;  CURSOR pdct_parameter_cur (id varchar,price NUMBER)  IS SELECT * FROM productinfo  WHERE productid like id||'%'  AND productprice>price;BEGIN  OPEN pdct_parameter_cur;     LOOP       FETCH pdct_parameter_cur INTO cur_prodrcd;       EXIT WHEN pdct_parameter_cur%NOTFOUND;       DBMS_OUTPUT.PUT_LINE('产品ID' || cur_prodrcd.productid);     END LOOP;  CLOSE pdct_parameter_cur;END;

 

转载于:https://my.oschina.net/langgege/blog/1358696

你可能感兴趣的文章
java中的取整(/)和求余(%)
查看>>
WPF换肤之三:WPF中的WndProc
查看>>
ArcGIS中如何导出单个矢量要素图形
查看>>
微信支付curl出错及错误码解决方案
查看>>
微信支付开发(5) 扫码并输入金额支付
查看>>
推荐一个计算机视觉图书:python计算机视觉编程
查看>>
Simple iPhone Keychain Access
查看>>
360,京东,在线编程题
查看>>
Large-Scale Video Classification 2017 比赛总结
查看>>
实现celery中出现拥挤队列时,及时发邮件通知
查看>>
飞天遁地、来去自如?Oracle数据库秉承技术当先,用户也来说说看
查看>>
【PMP】Head First PMP 学习笔记 第八章 质量管理
查看>>
使用 Sketch 和 Pixate 构建 Material Design 原型 - 第三部分
查看>>
.NET Core多平台开发体验[3]: Linux (Windows Linux子系统)
查看>>
人工智能将有效帮助数据中心降低运营成本
查看>>
5G NR标准制定加速 将对运营商计划产生重大影响
查看>>
关于iOS的后台下载和断点续传,说一说自己的理解(二,接上篇)
查看>>
模板类中使用iterator成员出错的解决办法
查看>>
iOS中 UIProgressView 技术分享
查看>>
DataStax公司CEO谈大数据和云计算
查看>>