2012-02-10 76 views
0

我有一個提供存儲過程(SP),我應該在TIBCO執行,其具有以下特徵:調用從TIBCO BW存儲過程與光標作爲輸入

PROCEDURE GET_STOCK_QTY(
    WarehouseId Number, 
    LineItem ref_lines, 
    ResponseCode OUT Number, 
    ResponseDesc OUT Varchar2, 
    RespLineItems OUT sys_refcursor 
); 

的* ref_lines *被定義爲如下:

TYPE items_record is RECORD(
    ItemCode varchar2(15), 
    ItemQuantity number 
); 
type ref_lines IS REF CURSOR RETURN items_record; 

所以,你已經注意到我有一個光標作爲SP的輸入和輸出。我一直在搜索這類問題,發現tibco並不支持這些類型的輸入和輸出,我也發現它甚至不支持布爾本機類型,這很奇怪...:S Eitherway,對於我讀過,兩個可能的解決方案是在路上:

  1. SQL直接
  2. Java自定義功能

現在,我的疑慮。

如果我打算使用解決方案編號1,我必須構建光標以提供純sql輸入,但我該怎麼做呢?我是否必須創建一個具有輸入值的臨時表,然後爲該表打開一個光標?這是做到這一點的唯一方法嗎?

我還沒有探索第二個解決方案,但我認爲Java可以支持這些類型的輸入和輸出,我只是聲明數組。這個假設是正確的嗎?這是否容易,或者我會像在解決方案1中那樣調用sql?

PS:這2個可能的解決方案是唯一的解決方案嗎?是否有任何tibco大師提供了一種解決方法來使BW支持此WEIRD輸入和輸出? :P

由於提前, 蒂亞戈Brunhoso努涅斯

+0

我想這不是一個簡單的問題......我開始認爲這種存儲過程不是一個最佳實踐,當它應該由外部應用程序調用時。我對嗎? – Omniausente 2012-02-14 15:06:04

回答

0

經過大量谷歌上搜索我設法解決這個問題的唯一方法是創建一個封裝了輸入和TIBCO輸出端的數據庫上的包裝包不能認識到它可以。

什麼我現在做的事情是:

  1. 創建了兩個新表(1個用於輸入光標,另一個用於輸出);
  2. 創建一個包裝器SP,它只接受輸入和輸出簡單的數據類型 - 不帶遊標;
  3. Tibco將值的輸入數組插入到創建的表中;
  4. 包裝器SP將光標打開到該表並使用遊標調用第一個SP;
  5. 最後它用輸出光標中的值填充輸出表,Tibco讀取此表;

(我知道這可能是沒有做到這一點的最好辦法...:S)

PS:它來到我所知,甲骨文的PL SQL支持原生XML輸入,我可以已經去了解決方案,這似乎是一個更清潔的,但它會需要我太長的時間來執行......如果任何人有這方面的知識,我會很感激一些提示!:)