本文转自:http://liye9801.blog.163.com/blog/static/6019703200901244448950/

今天学习了一个Oracle中的存储过程,一开始便被如果返回结果集难住了.经Google后,找到很多资料,发现一种最简便的方式(见下面的存储过程部分):

存储过程建好后,怎么调试它又成了问题,它不能像MS-SqlServer一样exec,但是可以通过下面的SQL语句调用(见调用存储过程SQL版),主要知识点是

参考游标的使用.

后面附上.NET调用存储过程返回结果集的方法.

JAVA调用的方法还没有进行测试,不过应该没什么问题.

--存储过程返回结果集

create or replace procedure getResult(p_cur out sys_refcursor)
as
begin
open p_cur for
select * from T_MyAccount; --你的sql 语句 end getResult; --SQL调用存储过程 DECLARE TYPE mytable IS TABLE OF t_myAccount%ROWTYPE;
l_data mytable;
l_refc sys_refcursor;
BEGIN --调用存储过程 getresult(l_refc); FETCH l_refc BULK COLLECT INTO l_data; CLOSE l_refc; FOR i IN .. l_data.COUNT
LOOP
DBMS_OUTPUT.put_line (l_data (i).fAccount || l_data (i).fPassword);
END LOOP;
END; --.NET调用存储过程 ''' <summary>
''' .NET 调用存储过程并返回结果集 VB.NET版 ''' 要注意的一个重点是orc.Parameters.Add("Rec", OracleDbType.RefCursor, ParameterDirection.Output)
''' </summary>
''' <remarks></remarks>
Private Sub ExecOracleProc()
Dim constr As String = "Data Source=192.168.0.209:1521/XE;Persist Security Info=True;User ID=LSH;password="
Dim con As New Oracle.DataAccess.Client.OracleConnection(constr)
Dim orc As New OracleCommand()
Dim oda As New OracleDataAdapter(orc)
con.Open()
orc.Connection = con
orc.CommandText = "getResult"
orc.Parameters.Add("Rec", OracleDbType.RefCursor, ParameterDirection.Output)
orc.CommandType = CommandType.StoredProcedure
'd.ExecuteNonQuery()
Dim ds As New DataSet
oda.Fill(ds)
Me.DataGridView2.DataSource = ds.Tables()
con.Close() End Sub 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(, ); // DEPTNO
stmt.registerOutParameter(, OracleTypes.CURSOR); //REF CURSOR
stmt.execute();
ResultSet rs = ((OracleCallableStatement)stmt).getCursor();
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();
}
}

[转]Oracle 调用存储过程并显示结果集 Oracle.DataAccess.Client OracleDbType.RefCursor的更多相关文章

  1. myabatis oracle 调用存储过程返回list结果集

    Mapper.xml 配置 <resultMap type="emp" id="empMap"> <id property="emp ...

  2. 【转】SQL2008 链接Oracle 调用存储过程

    1. SQL链接ORACLE 都是可视化的操作 如下图: 红色框选的是oracle的数据驱动,如果没有这个驱动 那需要单独安装oracle的client端 装完以后就有了. 2.在创建之前,在SQLS ...

  3. oracle创建存储过程并返回结果集(附C#调用代码)

    使用存储过程中,最常用的莫过于查询数据表,并返回结果集. 在SQL SERVER 中,这类操作最简单,通过简单的select * from xx 即可完成.但是在Oracle中并不支持这种写法,那么我 ...

  4. oracle调用存储过程和函数返回结果集

    在程序开发中,常用到返回结果集的存储过程,这个在mysql和sql server 里比较好处理,直接返回查询结果就可以了,但在oracle里面 要 out 出去,就多了一个步骤,对于不熟悉的兄弟们还得 ...

  5. Oracle 调用存储过程执行CRUD的小DEMO

    -----------------------------修改(表名,主键ID,要修改的列) create or replace procedure pro_code_edit(p_tbname in ...

  6. oracle的存储过程如何返回结果集

    CREATE OR REPLACE PACKAGE pkg_test AS     TYPE myrctype IS REF CURSOR;       PROCEDURE get (p_id NUM ...

  7. java下实现调用oracle的存储过程和函数

    在Oracle下创建一个test的账户,然后 1.创建表:STOCK_PRICES --创建表格 CREATE TABLE STOCK_PRICES( RIC VARCHAR() PRIMARY KE ...

  8. 【学习】java下实现调用oracle的存储过程和函数

    在oracle下创建一个test的账户,然后按一下步骤执行: 1.创建表:STOCK_PRICES --创建表格CREATETABLE STOCK_PRICES( RIC VARCHAR(6) PRI ...

  9. java 通过调用存储过程获取结果集

    一般在java中,数据查询是通过Statement, PreparedStatement获取结果集,今天向大家介绍通过CallableStatement调用存储过程,从而获取结果集.        本 ...

随机推荐

  1. CSLA的项目结构(一)

    由于我也是边看边学,在很多概念不是很清晰的情况下,也不好将书中的大段内容全部摘抄过来,所以结合项目源码先分析再总结,就成目前比较可行方案,第一篇先从项目结构入手. 项目源码下载后,主要的功能集中在Co ...

  2. C++ 输入输出流 总结

    1.ostream & operator<<(int); 重载了<<符号,用于对int类型的输出.为什么要返回ostream的引用呢? 例如: cout<< ...

  3. 欢迎来到Googny的博客

    本博客主要分享笔者的学习知识,以及工程中遇到的技术问题. 由于笔者技术水平有限,博客不足之处在所难免,还请各位网友不吝交流,共同进步. 一起体会分享的乐趣. JavaScript 部分 该部分深入浅出 ...

  4. Morris Traversal

    昨天临近要睡觉的时候做了一个leetcode题目,"Recover BST",算法很容易就想到了,直接找出两个异常点就好了,但是我写的算法是用栈实现的非递归遍历,空间复杂度是O(N ...

  5. Java 远程通讯技术及原理分析

    在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI.MINA.ESB.Burlap.Hessian.SOAP.EJB和JMS等,这些 ...

  6. javascript操作注册表

    try{                     var shell = new ActiveXObject("WScript.Shell"); //读注册表值var  key1  ...

  7. JSP九大内置对象分析

    JSP九大内置对象分为三类: 1.输入输出对象:out对象.response对象.request对象 2.通信控制对象:pageContext对象.session对象.application对象 3. ...

  8. python ssh弱口令爆破多线程脚本及遇到的一些错误与问题

    练习写了个SSH弱口令爆破多线程脚本,遇到的问题 1.一开始想import pexpect 中的pxssh 然而却一直该有错误, ImportError: cannot import name spa ...

  9. Android开发日志问题

    以前在Android开发中发现,日志打印好多,调试的时候各种加Log,之后就各种不删除,导致项目后期花大把时间删除日志打印. 学到一个好方法: 在所有尽可能高的父类里面加上一个常量 DEBUG ,一开 ...

  10. 【转】bt协议的详细分析

    转自:https://baoz.net/bt-protocol/ 一 BT系统的组成结构 1 普通的Web服务器:        例如Apache或IIS服务器 2 一个静态的种子文件:     即. ...