2011-10-20 10 views
0

リストを入力として使用するOracle 11g SOA Suiteデータベースアダプタを使用してサービスを作成したいと考えています。ですから、私はgetCountries操作にcountryIdのリストを与えることができるようにしたいと思います。Oracle 11g SOA Suite入力としてリストを受け入れるデータベースアダプタ

私はthisリンクを発見しました。それは動作しますが、それは区切り文字を含むパラメータを破るので理想的ではありません。

私は、入力と出力としてコレクションを持ち、for-each構造を使ってマッピングを行う関数を使用しようとしています。しかし、それを働かせることはできません。 DBAdapeterがこれを処理できるかどうかはわかりません。

誰もがこのようなことを試みましたか?

答えて

2

これを行うことができます - そのパラメータ(pCountryList)を文字列にします。そして、あなたが行にXMLを変換副選択(から一の国のIDを含む各行でクエリを作成する必要があり、それはあなたが有効な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)

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の11グラムのSOA Suiteのデータベース・アダプタで使用することができます。

0

例えば区切り文字列などのパラメータを与える別の可能な方法があります:#パラメータは、単純な区切り文字列である

:「「1,2,3,4,5,6,7,8、 9,10 '"

UA、UA、UA、UA、UA、(INSTR STRING_TO_TOKENIZE、DELIMITER、1、LEVEL) - DECODE(レベル、1,1、INSTR(STRING_TO_TOKENIZE、DELIMITER、1、LEVEL-1)+1))FROM(SELECT#パラメータ|| '、' AS STRING_TO_TOKENIZE、 '、' DELIMITER FROM DUAL)INSTR(STRING_TO_TOKENIZE、DELIMITER、1、LEVEL)> 0)で接続する

SELECT SUBSTR(STRING_TO_TOKENIZE、DECODE(LEVEL、1、1、INSTR(STRING_TO_TOKENIZE、デリミタ1、レベル1:それは区切られた文字列から解析された行を返すよう

トリックは、以下のサブクエリであります)+1)、 INSTR(STRING_TO_TOKENIZE、DELIMITER、1、LEVEL) - DECODE(LEVEL、1,1、INSTR(STRING_TO_TOKENIZE、DELIMITER、1、LEVEL-1)+1))FROM (SELECT '1,2、 3,4,5,6,7,8,9,10 '|| (STRING_TO_TOKENIZE、DELIMITER、1、LEVEL)> 0

で接続します。