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

来源:互联网 发布:医学论文数据库 编辑:程序博客网 时间:2024/05/29 09:12
  • 说明
    • 定义:动态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循环输出游标中的数据

原创粉丝点击