我正在使用oracle數據庫。當我試圖使用單個select查詢獲取數據時,它在數據集中返回了一個表。 如何在oracle中編寫一個選擇查詢或過程,在哪裏可以獲得具有2-3(多個)表的數據集?Oracle查詢/存儲過程返回多個結果集
1
A
回答
1
這正是我做什麼,這是很簡單的:
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];
4
據我瞭解你的問題,你想減少你的數據庫的往返旅程。 這可以通過一個存儲過程通過以下方式進行:
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
相關問題
- 1. Oracle存儲過程返回多個結果到.NET
- 2. Oracle存儲過程返回分頁結果集
- 3. 爲什麼NHibernate需要Oracle存儲過程返回結果集?
- 4. 返回多個結果集的存儲過程
- 5. 存儲過程返回多個結果集
- 6. 返回多個結果集的查詢
- 7. Oracle存儲過程 - 存儲查詢結果
- 8. 返回查詢結果的MySQL存儲過程
- 9. 存儲過程返回任何結果,但查詢確實
- 10. 查詢和存儲過程返回不同的結果
- 11. 從存儲過程返回一個結果集
- 12. WCF從存儲過程返回結果
- 13. 存儲過程不返回結果
- 14. 返回存儲過程的結果sql
- 15. SSRS - 在一個存儲過程中返回多個查詢
- 16. Apache DbUtils:處理從存儲過程返回的多個結果集
- 17. 如何從groovy運行存儲過程,返回多個結果集
- 18. mybatis是否支持返回多於1個結果集的存儲過程?
- 19. SQL Server JDBC在調用存儲過程時返回多個結果集
- 20. 存儲過程:子查詢返回多個值
- 21. Oracle SQL爲什麼查詢返回多個結果?
- 22. LINQ查詢返回多個結果
- 23. 存儲過程是否可以返回結果集?
- 24. 存儲過程結果集與返回值
- 25. MS SQL存儲過程返回的結果集與ODBC
- 26. MySQL - 存儲過程不返回結果集
- 27. 如何阻止從存儲過程返回結果集?
- 28. 存儲過程返回多個結果集,但結果集的數量不固定
- 29. 子查詢返回多個值。存儲
- 30. 存儲過程用查詢結果集填充變量
不要ü想加入2-3表格和使用SELECT語句得到的數據? – Teja 2012-03-07 05:19:27
表格可能相關,也可能不相關。但是爲了減少數據庫命中的數量,我希望在一次命中中獲得多個表。 – ABC 2012-03-07 05:26:38
你的桌子是什麼,你嘗試過什麼? – 2012-03-07 05:27:47