Web services Oracle 11g SOA套件数据库适配器接受列表作为输入

Web services Oracle 11g SOA套件数据库适配器接受列表作为输入,web-services,soa,jdeveloper,Web Services,Soa,Jdeveloper,我希望能够使用Oracle11GSOASuite数据库适配器创建一个以列表作为输入的服务。因此,我希望能够向getCountries操作提供countryId列表 我找到了链接。它可以工作,但在包含定界字符的参数上会中断,因此不理想 我一直在尝试使用一个函数,该函数将集合作为输入和输出,并用于每个构造来进行映射。但无法让它工作。我不确定DBAdapter是否能处理这个问题 有人尝试过类似的方法吗?您可以这样做-将参数pCountryList设置为字符串 要使其正常工作,您需要将列表作为有效的XM

我希望能够使用Oracle11GSOASuite数据库适配器创建一个以列表作为输入的服务。因此,我希望能够向getCountries操作提供countryId列表

我找到了链接。它可以工作,但在包含定界字符的参数上会中断,因此不理想

我一直在尝试使用一个函数,该函数将集合作为输入和输出,并用于每个构造来进行映射。但无法让它工作。我不确定DBAdapter是否能处理这个问题


有人尝试过类似的方法吗?

您可以这样做-将参数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列表,可与Oracle 11g SOA Suite数据库适配器一起使用。

将参数作为分隔字符串提供时,还有另一种可能的方法,例如:

其中参数是简单分隔字符串:“1,2,3,4,5,6,7,8,9,10”

从C U中选择U.A,U.B,其中U.A在选择子字符串_TO_标记化,解码级别,1,1,指令串_TO_标记化,定界符,1,级别1+1,指令串_TO_标记化,定界符,1,级别-解码级别,1,指令串_TO_标记化,定界符,1,级别1+1,从选择参数| | |',“AS STRING_TO_标记化,”,'作为分隔符从双连接通过INSTRSTRING_到_标记化,分隔符,1,级别>0

技巧在于以下子查询中,因为它从分隔字符串返回已解析的行:

选择SUBSTR STRING_TO_TOKENIZE,DECODELEVEL,1,1,INSTRSTRING_TO_TOKENIZE,DELIMITER,1,LEVEL-1+1, INSTRSTRING_TO_标记化,分隔符,1,级别-解码级别,1,1,INSTRSTRING_TO_标记化,分隔符,1,级别-1+1自 选择'1,2,3,4,5,6,7,8,9,10'| |','AS STRING_TO_TOKENIZE','AS DELIMITER FROM DUAL CONNECT BY INSTRSTRING_TO_TOKENIZE,DELIMITER,1,LEVEL>0

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