2012-08-14 45 views
0

我已經在返回與根據參數的不同列,它是這樣一個遊標甲骨文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代碼。我的問題是如何以優雅的方式處理這種情況。我有一些想法,但不知道是否會工作:

  1. 創建處理每一個涉及兩個光標列從SP返回的數據窗口對象,則每行復制到數據窗口的預期。
  2. 創建一個DataStore並使用Create方法傳遞sp,然後複製預期數據窗口中的行。
  3. 動態執行過程,獲取每一行並將每個結果添加到期望的DataWindow的新行中。

我還沒有嘗試過第一個,因爲有很多列,它需要很長時間才能完成。第二個看起來不錯,但我不知道如何處理一個沒有DataWindow對象的DataStore,並且不知道這是否可能(1)。第三個是我解決這個問題的最後一個選擇。在開始實施這個解決方案之前,我想問問人們,因爲我是PowerBuilder的新手,即使我不會在這方面工作太久,我也希望以正確的方式來完成這個任務。

感謝您的幫助。我發現這篇文章關於使用Custom DataStores,但我不知道我是否只能使用1個DataStore,或者我應該使用2.另外,對於Oracle連接,我不使用SQLCA,而是使用另一個事務對象,所以我不知道該怎麼做。

回答

1

保持簡單。

你知道存儲過程的細節。如果您從PB呼叫此SP,您在呼叫之前已知道它的aParam。爲什麼不定義2個數據窗口,每個版本的結果都有一個?

每個數據倉庫都有一個檢索參數(傳遞給存儲過程的參數),並將從sp中獲得結果。

在運行時,根據該檢索參數,並檢索所述值之前,分配相應的dataobject到數據窗口對象,它是上:要麼適合aParam = 1的DW或適合的else部分DW。

+0

感謝您的幫助,這種方法完成了這項工作。 – 2012-08-17 21:04:52

相關問題