本文转自: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. 第一章 Lambda表达式

    1.1 Why Lambdas? 当你操作多线程的时候,你会像下面这样将要处理的代码放到run()函数中: class Worker implements Runnable { public void ...

  2. 三相异步电动机过载保护及报警PLC控制

    一.项目所需设备.工具.材料 见表7-1. 表7-1  项目所需设备.工具.材料 二.  训练内容: 1.项目描述 试设计一电动机过载保护程序,要求电动机过载时能自动停止运转,同时发出10秒钟的声光报 ...

  3. 2015北京网络赛B题 Mission Impossible 6

    借用大牛的一张图片:模拟 #include<cstdio> #include<cmath> #include<cstring> #include<algori ...

  4. 请求码(requestCode)与结果码(resultCode)解析

    Android apk开发中经常需要在活动(Activity)之间穿梭,并实现活动之间的数据传递.为了启动一个新的活动并得到该活动的返回数据,需调用方法startActivityForResult() ...

  5. usb 驱动

    usb 驱动学习总结: usb 采用分层的拓扑结构,金字塔型,最多是7层.usb 是主从结构,主和主或者从和从之间不能交换数据.理论上一个usb主控制器最多可接127个设备,协议规定每个usb设备具有 ...

  6. Hubot Slack CoffeeScript

    公司买了一台Mac Pro,为了物尽其用,研究了半天把hubot-slack装好了,然后又花了点时间学习CoffeeScript(照着例子写也足够了).用slack来发版本还是很爽的.

  7. caffe IDE 开发环境配置

    这篇博文主要记录caffe开发环境的种种. 在直接使用caffe的时候,需要对数据做格式转换.然后配置一个网络格式的描述文件即可进行训练.但是在做预测和格式转化的时候,我们需要将Caffe当作一个sd ...

  8. Android实例-MotionSensor加速度(XE8+小米2)

    结果: 1. 实例代码: unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classe ...

  9. C++学习笔记(三):数组

    数组声明时必须指定该数组的长度: ]; 这个时候已经分配了内存,但没有初始化,所以具体的值是不确定的: 初始化: ] = {, , }; ] = {};//指定第一个数字为1,后面的使用0填充: ] ...

  10. 关于Windows文件名和路径名的那些事

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:关于Windows文件名和路径名的那些事.