我已經在返回與根據參數的不同列,它是這樣一個遊標甲骨文9克取得了存儲過程:如何處理過程返回2個不同的結果
CREATE OR REPLACE PROCEDURE ASCHEMA.SP_TWOCURSORS
(
aParam NUMBER,
P_RETURN OUT SYS_REFCURSOR
)
IS
BEGIN
IF aParam = 1 THEN
OPEN P_RETURN FOR
SELECT
a.column1, (number)
a.column2 (varchar2)
FROM
table1 a;
ELSE
OPEN P_RETURN FOR
SELECT
b.column1, (varchar2)
b.column2, (number)
b.column3 (number)
FROM
table1 b;
END IF;
END;
我要消耗這過程,並將返回的數據傳遞給DataWindow1或DataWindow2,具體取決於返回的遊標,這些數據窗口在運行時通過執行來自其他源的另一個過程來填充。我無法修改數據庫對象(比如將sp分成兩部分),只是PowerBuilder代碼。我的問題是如何以優雅的方式處理這種情況。我有一些想法,但不知道是否會工作:
- 創建處理每一個涉及兩個光標列從SP返回的數據窗口對象,則每行復制到數據窗口的預期。
- 創建一個DataStore並使用
Create
方法傳遞sp,然後複製預期數據窗口中的行。 - 動態執行過程,獲取每一行並將每個結果添加到期望的DataWindow的新行中。
我還沒有嘗試過第一個,因爲有很多列,它需要很長時間才能完成。第二個看起來不錯,但我不知道如何處理一個沒有DataWindow對象的DataStore,並且不知道這是否可能(1)。第三個是我解決這個問題的最後一個選擇。在開始實施這個解決方案之前,我想問問人們,因爲我是PowerBuilder的新手,即使我不會在這方面工作太久,我也希望以正確的方式來完成這個任務。
感謝您的幫助。我發現這篇文章關於使用Custom DataStores,但我不知道我是否只能使用1個DataStore,或者我應該使用2.另外,對於Oracle連接,我不使用SQLCA,而是使用另一個事務對象,所以我不知道該怎麼做。
感謝您的幫助,這種方法完成了這項工作。 – 2012-08-17 21:04:52