首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于返回多个结果集的Oracle查询/存储过程

用于返回多个结果集的Oracle查询/存储过程
EN

Stack Overflow用户
提问于 2012-03-07 13:17:11
回答 2查看 10.9K关注 0票数 1

我使用的是oracle数据库。当我尝试使用单个select查询获取数据时,它返回数据集中的单个表。如何在oracle中编写一个select查询或过程,在那里我可以获得一个包含2-3个(多)表的数据集?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-09 12:56:11

这就是我所做的,非常简单:

代码语言:javascript
复制
Database db = DatabaseFactory.CreateDatabase("ConnectionString");
object[] results = new object[3];
DbCommand cmd = db.GetStoredProcCommand("DATABASE.SELECT_JOB_HISTORY.GetJobHistoryByEmployeeId",results);            
DataSet ds = db.ExecuteDataSet(cmd);
DataTable dt1 = ds.Tables[0];
DataTable dt2 = ds.Tables[1];
票数 2
EN

Stack Overflow用户

发布于 2012-03-07 14:09:39

据我所知,您的问题是您希望减少到数据库的往返行程。存储过程可以通过以下方式完成此操作:

http://msdn.microsoft.com/en-us/library/ms971506.aspx#msdnorsps_topic6

包头:

代码语言:javascript
复制
CREATE OR REPLACE PACKAGE SELECT_JOB_HISTORY AS
TYPE T_CURSOR IS REF CURSOR;
PROCEDURE GetJobHistoryByEmployeeId
(
    p_employee_id IN NUMBER,
    cur_JobHistory OUT T_CURSOR
);
END SELECT_JOB_HISTORY;

包:

代码语言:javascript
复制
CREATE OR REPLACE PACKAGE BODY SELECT_JOB_HISTORY AS
PROCEDURE GetJobHistoryByEmployeeId
(
    p_employee_id IN NUMBER,
    cur_JobHistory OUT T_CURSOR
)
IS
BEGIN
    OPEN cur_JobHistory FOR
    SELECT * FROM JOB_HISTORY
        WHERE employee_id = p_employee_id;

END GetJobHistoryByEmployeeId;
END SELECT_JOB_HISTORY;

客户端:

代码语言:javascript
复制
// create connection
OracleConnection conn = new OracleConnection("Data Source=oracledb;
    User Id=UserID;Password=Password;");

// create the command for the stored procedure
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "SELECT_JOB_HISTORY.GetJobHistoryByEmployeeId";
cmd.CommandType = CommandType.StoredProcedure;

// add the parameters for the stored procedure including the REF CURSOR
// to retrieve the result set
cmd.Parameters.Add("p_employee_id", OracleType.Number).Value = 101;
cmd.Parameters.Add("cur_JobHistory", OracleType.Cursor).Direction =
    ParameterDirection.Output;

// open the connection and create the DataReader
conn.Open();
OracleDataReader dr = cmd.ExecuteReader();

// output the results and close the connection.
while(dr.Read())
{
    for(int i = 0; i < dr.FieldCount; i++)
        Console.Write(dr[i].ToString() + ";");
    Console.WriteLine();
}
conn.Close();

如果你必须连接这些表,你也可以使用普通的连接并在客户机上分割结果(imho,这是很多ORM做这件事的方式)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9596219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档