博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态SQL游标和函数返回游标举例(转载)
阅读量:5877 次
发布时间:2019-06-19

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

动态SQL游标的例子,来自:
strSQL:='SELECT * FROM ' || tmp_tbl;
open c_sign_stat for strSQL;
 

函数返回游标的例子,来自:

 
过程或函数能返回或out静态游标吗?
 
CREATE OR REPLACE PACKAGE Types AS 
  TYPE cursor_type IS REF CURSOR; 
END Types; 
/
 
CREATE OR REPLACE 
PROCEDURE GetEmpRS (p_deptno    IN  emp.deptno%TYPE, 
                    p_recordset OUT Types.cursor_type) AS 
BEGIN 
  OPEN p_recordset FOR 
    SELECT ename, 
          empno, 
          deptno 
    FROM  emp 
    WHERE  deptno = p_deptno 
    ORDER BY ename; 
END GetEmpRS; 
/
 
 
在pl/sql中使用: 
SET SERVEROUTPUT ON SIZE 1000000 
DECLARE 
  v_cursor  Types.cursor_type; 
  v_ename  emp.ename%TYPE; 
  v_empno  emp.empno%TYPE; 
  v_deptno  emp.deptno%TYPE; 
BEGIN 
  GetEmpRS (p_deptno    => 30, 
            p_recordset => v_cursor); 
            
  LOOP 
    FETCH v_cursor 
    INTO  v_ename, v_empno, v_deptno; 
    EXIT WHEN v_cursor%NOTFOUND; 
    DBMS_OUTPUT.PUT_LINE(v_ename || ' | ' || v_empno || ' | ' || v_deptno); 
  END LOOP; 
  CLOSE v_cursor; --记得close游标,add by valleylord
END; 
/
 
在java中使用: 
import java.sql.*; 
import Oracle.jdbc.*;
 
public class TestResultSet  { 
  public TestResultSet() { 
    try { 
      DriverManager.registerDriver (new Oracle.jdbc.OracleDriver()); 
      Connection conn = DriverManager.getConnection("jdbc:Oracle:oci:@w2k1", "scott", "tiger"); 
      CallableStatement stmt = conn.prepareCall("BEGIN GetEmpRS(?, ?); END;"); 
      stmt.setInt(1, 30); // DEPTNO 
      stmt.registerOutParameter(2, OracleTypes.CURSOR); //REF CURSOR 
      stmt.execute(); 
      ResultSet rs = ((OracleCallableStatement)stmt).getCursor(2); 
      while (rs.next()) { 
        System.out.println(rs.getString("ename") + ":" + rs.getString("empno") + ":" + rs.getString("deptno")); 
      } 
      rs.close(); 
      rs = null; 
      stmt.close(); 
      stmt = null; 
      conn.close(); 
      conn = null; 
    } 
    catch (SQLException e) { 
      System.out.println(e.getLocalizedMessage()); 
    } 
  }
 
  public static void main (String[] args) { 
    new TestResultSet(); 
  } 
}
 
 

转载于:https://www.cnblogs.com/valleylord/archive/2012/11/07/2758784.html

你可能感兴趣的文章
配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler” 解决办法...
查看>>
AIX 7.1 install python
查看>>
PHP盛宴——经常使用函数集锦
查看>>
重写 Ext.form.field 扩展功能
查看>>
Linux下的搜索查找命令的详解(locate)
查看>>
福利丨所有AI安全的讲座里,这可能是最实用的一场
查看>>
开发完第一版前端性能监控系统后的总结(无代码)
查看>>
Python多版本情况下四种快速进入交互式命令行的操作技巧
查看>>
MySQL查询优化
查看>>
【Redis源码分析】如何在Redis中查找大key
查看>>
关于链接文件的探讨
查看>>
android app启动过程(转)
查看>>
Linux—源码包安装
查看>>
JDK8中ArrayList的工作原理剖析
查看>>
安装gulp及相关插件
查看>>
如何在Linux用chmod来修改所有子目录中的文件属性?
查看>>
Applet
查看>>
高并发环境下,Redisson实现redis分布式锁
查看>>
乌克兰基辅一世遗修道院起火 现场火光照亮夜空
查看>>
[iOS 10 day by day] Day 2:线程竞态检测工具 Thread Sanitizer
查看>>