Oracle查询/存储过程返回多个结果集
问题描述:
我正在使用oracle数据库。当我试图使用单个select查询获取数据时,它在数据集中返回了一个表。 如何在oracle中编写一个选择查询或过程,在哪里可以获得具有2-3(多个)表的数据集?Oracle查询/存储过程返回多个结果集
答
这正是我做什么,这是很简单的:
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];
答
据我了解你的问题,你想减少你的数据库的往返旅程。 这可以通过一个存储过程通过以下方式进行:
http://msdn.microsoft.com/en-us/library/ms971506.aspx#msdnorsps_topic6
Package头:
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;
套餐:
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;
客户:
// 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();
如果你必须加入这些表格,你也可以使用正常的连接并在客户端分割结果(这是许多ORM如何操作的方式)。
+0
谢谢埃吉,你的解决方案真的帮助。 – ABC 2012-03-09 04:57:45
不要ü想加入2-3表格和使用SELECT语句得到的数据? – Teja 2012-03-07 05:19:27
表格可能相关,也可能不相关。但是为了减少数据库命中的数量,我希望在一次命中中获得多个表。 – ABC 2012-03-07 05:26:38
你的桌子是什么,你尝试过什么? – 2012-03-07 05:27:47