在Oracle中返回多个结果集

原创 2004年10月17日 13:56:00

使用多个结果集

Oracle 不支持批量查询,因此无法从一个命令返回多个结果集。使用存储过程时,返回多个结果集类似于返回单个结果集;必须使用 REF CURSOR 输出参数。要返回多个结果集,请使用多个 REF CURSOR 输出参数。

以下是返回两个结果集(全部 EMPLOYEES 和 JOBS 记录)的包规范:

CREATE OR new PACKAGE SELECT_EMPLOYEES_JOBS AS
TYPE T_CURSOR IS REF CURSOR;
PROCEDURE GetEmployeesAndJobs (
    cur_Employees OUT T_CURSOR,    
    cur_Jobs OUT T_CURSOR
);
END SELECT_EMPLOYEES_JOBS;

包正文如下所示:

CREATE OR new PACKAGE BODY SELECT_EMPLOYEES_JOBS AS
PROCEDURE GetEmployeesAndJobs
(
    cur_Employees OUT T_CURSOR,
    cur_Jobs OUT T_CURSOR
)
IS
BEGIN
    -- return all EMPLOYEES records
    OPEN cur_Employees FOR
    SELECT * FROM Employees;

    -- return all JOBS records
    OPEN cur_Jobs FOR
    SELECT * FROM Jobs;
END GetEmployeesAndJobs;
END SELECT_EMPLOYEES_JOBS;

以下代码显示了如何使用从上述包中返回的两个结果集来填充 DataSet 中的两个相关表:

// create the connection
OracleConnection conn = new OracleConnection("Data Source=oracledb;
    User Id=UserID;Password=Password;");

// define the command for the stored procedure
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "SELECT_EMPLOYEES_JOBS.GetEmployeesAndJobs";

// add the parameters including the two REF CURSOR types to retrieve
// the two result sets
cmd.Parameters.Add("cur_Employees", OracleType.Cursor).Direction =
    ParameterDirection.Output;
cmd.Parameters.Add("cur_Jobs", OracleType.Cursor).Direction =
    ParameterDirection.Output;
cmd.CommandType = CommandType.StoredProcedure;

// create the DataAdapter and map tables
OracleDataAdapter da = new OracleDataAdapter(cmd);
da.TableMappings.Add("Table", "EMPLOYEES");
da.TableMappings.Add("Table1", "JOBS");

// create and fill the DataSet
DataSet ds = new DataSet();
da.Fill(ds);

// create a relation
ds.Relations.Add("EMPLOYEES_JOBS_RELATION",
   ds.Tables["JOBS"].Columns["JOB_ID"],
   ds.Tables["EMPLOYEES"].Columns["JOB_ID"]);

// output the second employee (zero-based array) and job title
// based on the relation
Console.WriteLine("Employee ID: " +
    ds.Tables["EMPLOYEES"].Rows[1]["EMPLOYEE_ID"] +
    "; Job Title: " +
    ds.Tables["EMPLOYEES"].Rows[1].GetParentRow(
    "EMPLOYEES_JOBS_RELATION")["JOB_TITLE"]);

控制台输出显示了第二个员工的职务:

Employee ID: 101; Job Title: Administration Vice President

来自于:http://www.microsoft.com/china/MSDN/library/data/dataAccess/DMSDNorsps.mspx
遇到的错误:在开发时遇到了未处理的句柄错误,其原因是没有为所有的输出参数返回值。

ORACLE如何返回结果集

Oracle不像SQLServer那样在存储过程中用Select就可以返回结果集,而是通过Out型的参数进行结果集返回的。实际上是利用REF CURSOR 代码如下:   --procedure返回...
  • xudong1107
  • xudong1107
  • 2017年05月27日 09:33
  • 323

Oracle的存储过程返回结果集

Oracle存储过程: CREATE OR REPLACE PROCEDURE getcity ( citycode IN VARCHAR2, ref_cursor ...
  • u012975700
  • u012975700
  • 2016年04月21日 20:17
  • 1584

Java调用oracle存储过程返回多个结果集

Java调用oracle存储过程返回多个结果集
  • liangweiwei130
  • liangweiwei130
  • 2014年02月20日 09:12
  • 664

oracle存储过程学习(二)-调用存储过程和返回结果集

1.定义包:oracle返回的结果集需要
  • hekang1011
  • hekang1011
  • 2014年04月04日 15:16
  • 1043

Java 执行存储过程--返回多个结果集

在JAVA中执行存储过程用 CallableStatement callsm= con.prepareCall(strsql); callsm.execute();  在执行存储过程后,要得到结果集c...
  • Baykermr
  • Baykermr
  • 2009年10月13日 16:01
  • 5056

Oracle的存储过程-返回一个查询的结果集

oracle的存储过程返回一个查询的结果集create or replace procedure p_test(p_cur out sys_refcursor) as begin open ...
  • u012975700
  • u012975700
  • 2016年04月21日 19:55
  • 2074

关于oracle调用存储过程返回结果集

这两天因为公司要求,去学习了下以前一直模模糊糊的存储过程,记录下关于返回结果集的问题。 要返回结果集,首先你必须有个游标,它是记录你的查询集的。而定义一个游标有好多方法: 1,你可以在包中定义。然...
  • wjs7740
  • wjs7740
  • 2014年01月17日 10:38
  • 1889

java调用ORACLE函数返回结果集

CREATE OR REPLACE PACKAGE MY_STEEL_SOFTAS  --存储过程返回数据集的类型  TYPE ReturnDataSet IS REF CURSOR;END MY_S...
  • colincrazy
  • colincrazy
  • 2007年05月23日 13:50
  • 4209

Oracle中过程/函数返回结果集

Oracle中函数/过程返回结果集的几种方式:    以函数return为例,存储过程只需改为out参数即可,在oracle 10g测试通过.    (1) 返回游标:        return的类...
  • feiliu010
  • feiliu010
  • 2007年03月23日 15:44
  • 20626

最完整的:JAVA调用ORACLE的存储过程、函数的返回结果集例子

 以下开发例子参见两个附件的图片:        JAVA调用ORACLE的存储过程、函数的返回结果集的JAVA开发界面.JPG        JAVA调用ORACLE的存储过程、函数的返回结果集的P...
  • outget1
  • outget1
  • 2009年05月12日 15:19
  • 10438
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在Oracle中返回多个结果集
举报原因:
原因补充:

(最多只允许输入30个字)