oracle12C--处理游标操作(62)

  • 说明
    • 定义:动态SQL除了处理单行查询操作外,还可以利用游标完成多行数据的操作;在游标定义时也同样可以使用动态绑定变量的方式,此时就需要在打开游标变量时增加USING子句操作;
    • 语法:在打开游标变量中使用USING

OPEN 游标变量名称 FOR 动态SQL语句 [USING 绑定变量,绑定变量,....]

  • 语法2:利用FETCH一次性保存多条数据到集合类型中

FETCH 动态游标BULK COLLECT INTO 集合变量 ....;

  • 举个栗子
    • 示例1:在游标中使用动态SQL

DECLARE

cur_emp SYS_REFCURSOR ; -- 定义游标变量

v_emprow emp%ROWTYPE ; -- 定义emp行类型

v_deptno emp.deptno%TYPE := 10 ; -- 定义要查询雇员的部门编号

BEGIN

OPEN cur_emp FOR 'SELECT * FROM emp WHERE deptno=:dno '

USING v_deptno ;

LOOP

FETCH cur_emp INTO v_emprow ; -- 取得游标数据

EXIT WHEN cur_emp%NOTFOUND ; -- 如果没有数据则退出

DBMS_OUTPUT.put_line('雇员姓名:' || v_emprow.ename || ',雇员职位:' || v_emprow.job) ;

END LOOP ;

CLOSE cur_emp ;

END ;

/

本程序定义了一个弱类型的游标变量,而在程序主体部分使用OPEN....FOR操作要使用的动态SQL,由于此时绑定了一个变量,所以需要使用USING配置此变量内容

  • 示例2:利用FETCH保存查询结果

DECLARE

cur_emp SYS_REFCURSOR ; -- 定义游标变量

TYPE emp_index IS TABLE OF emp%ROWTYPE INDEX BY PLS_INTEGER ; -- 定义索引表

v_emprow emp_index ; -- 定义emp行类型

v_deptno emp.deptno%TYPE := 10 ; -- 定义要查询雇员的部门编号

BEGIN

OPEN cur_emp FOR 'SELECT * FROM emp WHERE deptno=:dno' USING v_deptno ;

FETCH cur_emp BULK COLLECT INTO v_emprow ;

CLOSE cur_emp ;

FOR x IN 1 .. v_emprow.COUNT LOOP

DBMS_OUTPUT.put_line('雇员编号:' || v_emprow(x).empno || ',姓名:' || v_emprow(x).ename || ',职位:' || v_emprow(x).job) ;

END LOOP ;

END ;

/

本程序是将游标取得数据,通过FETCH BULK COLLECT INTO 语句一次性地保存在了emp_index类型的变量中,而后采用FOR循环输出游标中的数据

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值