2011-10-20 76 views
0

我希望能夠使用Oracle 11g SOA套件數據庫適配器創建服務,該套接字將列表作爲輸入。所以我希望能夠爲getCountries操作提供一個countryId列表。我發現this鏈接。它可以工作,但是它在包含分隔字符的參數上斷開,所以它不是理想的。Oracle 11g SOA套件數據庫適配器接受列表作爲輸入

我一直在嘗試使用一個具有集合作爲輸入和輸出的函數,並使用for-each構造來執行映射。但不能讓它工作。我不確定DBAdapeter是否可以處理這個問題。

有沒有人試過類似的東西?

回答

2

你可以這樣做 - 使參數(pCountryList)成爲一個字符串。

爲了使它工作,你需要提供列表作爲一個有效的XML文檔

<?xml version="1.0"?> 
<Countries> 
<Country><ID>MyCountyID 01</ID></Country> 
<Country><ID>777</ID></Country> 
<Country><ID>ID__3</ID></Country> 
</Countries> 

然後,你需要創建一個帶有把XML爲行(從包含一個國家ID各行的子查詢的查詢該XML)

SELECT * FROM MyTable WHERE CountryID IN 
(
SELECT extractvalue(column_value, '/Country/ID') ContryID 
FROM TABLE(XMLSequence(XMLTYPE(:pCountryList).extract('/Countries/Country'))) t); 

此查詢需要國家ID列表(打包成一個XML字符串),可與的Oracle 11g SOA套件數據庫適配器使用。

0

沒有給出參數爲分隔字符串例如,當另一種可能的方式:

其中#parameter是簡單分隔的字符串:「'1,2,3,4,5,6,7,8, (SELECT SUBSTR(STRING_TO_TOKENIZE,DECODE(LEVEL,1,1,INSTR(STRING_TO_TOKENIZE,DELIMITER,1,LEVEL-1)+1),INSTR()中的UA中選擇UA,UB。 STRING_TO_TOKENIZE,DELIMITER,1,LEVEL) - DECODE(LEVEL,1,1,INSTR(STRING_TO_TOKENIZE,DELIMITER,1,LEVEL-1)+1))FROM(SELECT #parameter ||','AS STRING_TO_TOKERIZE,','AS DELIMITER FROM DUAL)通過INSTR連接(STRING_TO_TOKENIZE,DELIMITER,1,LEVEL)> 0)

訣竅是在下面的子查詢作爲它返回從分隔的字符串解析的行:

SELECT SUBSTR(STRING_TO_TOKENIZE,DECODE(LEVEL,1,1,INSTR(STRING_TO_TOKENIZE,DELIMITER,如圖1所示,第1級)+1) INSTR(STRING_TO_TOKENIZE,DELIMITER,1,LEVEL) - DECODE(LEVEL,1,1,INSTR(STRING_TO_TOKENIZE,DELIMITER,1,LEVEL-1)+1) 3,4,5,6,7,8,9,10'|| ','AS STRING_TO_TOKENIZE,','作爲DELIMITER FROM DUAL)通過INSTR連接(STRING_TO_TOKENIZE,DELIMITER,1,LEVEL)> 0