0
我寫了下面的存儲過程,多個數據集回到我的前端.NET應用程序Oracle存儲過程返回多個結果到.NET
create or replace PROCEDURE GET_EMPLOYEE_INFO
(
EMP_NO IN VARCHAR2,
E_RECORD_SET1 OUT SYS_REFCURSOR,
E_RECORD_SET2 OUT SYS_REFCURSOR,
E_RECORD_SET3 OUT SYS_REFCURSOR,
E_RECORD_SET4 OUT SYS_REFCURSOR
) AS
BEGIN
OPEN E_RECORD_SET1 FOR
SELECT * FROM EMP.EMPLOYEES;
OPEN E_RECORD_SET2 FOR
SELECT * FROM EMP.CITIES;
OPEN E_RECORD_SET3 FOR
SELECT * FROM EMP.STATES;
OPEN E_RECORD_SET1 FOR
SELECT * FROM EMP.DURATION;
每個查詢正確執行自身。當我執行存儲過程時,它顯示結果集,但我不相信所有的數據都被抓取。在底部,它仍然說「運行IDE連接」。
- 過程是否循環?
- 對
SYS_REFCURSOR
類型有限制嗎? - 我需要關閉這些遊標嗎?
嘿賈斯汀感謝您的答覆,這裏是我對您的問題的答案。首先emp_no將用在我將在幾天內實現的where子句中。 emp_no是一個varchar,是的,我已經在存儲過程結束時結束。 「it」是指當我使用oracle sql developer執行存儲過程時打開的輸出日誌對話框。你也建議這是一個非常規的設計,你可以請建議一個更強大的設計作爲新的Oracle,我需要在oracle中使用遊標從存儲過程返回一個記錄集?我怎麼會關閉遊標? – 2012-07-19 21:34:15
賈斯汀感謝您的回覆, 這裏是我對您問題的回答。 首先,emp_no將用在我將在幾天內實現的where子句中。 emp_no是一個varchar,是的,我已經在存儲過程結束時結束。 「it」是指當我使用oracle sql開發人員執行存儲過程時打開的輸出日誌對話框。 也你提出這是一個不尋常的設計,你可以請建議一個更強大的設計,因爲我是新來的oracle, 我需要在oracle中使用遊標來從存儲過程返回記錄集? 如何關閉遊標? – 2012-07-19 21:40:05
@JustinRusso - 通常情況下,你要麼有單獨的過程,要麼你將返回一個單獨的'SYS_REFCURSOR',其結果是將所涉及的四個表加在一起。您不想嘗試在您的客戶端應用程序中推出自己的pududo-join邏輯。如果你只是從SQL Developer執行這個存儲過程(在這種情況下c#和.net標記似乎不適用),SQL Developer將關閉這些遊標。當您編寫C#代碼來調用此過程時,您的C#代碼將需要關閉遊標。 – 2012-07-19 22:27:23