【问题标题】:Oracle 11g SOA Suite Database adapter accepting list as inputOracle 11g SOA Suite 数据库适配器接受列表作为输入
【发布时间】:2011-10-20 15:35:14
【问题描述】:

我希望能够使用 Oracle 11g SOA Suite 数据库适配器创建一个将列表作为输入的服务。所以我希望能够为 getCountries 操作提供一个 countryId 列表。

我找到了this 链接。它可以工作,但是会在包含分隔符的参数上中断,因此并不理想。

我一直在尝试使用一个将集合作为输入和输出的函数,并使用 for-each 构造来进行映射。但不能让它工作。我不确定 DBAdapeter 是否可以处理这个问题。

有人试过这样的吗?

【问题讨论】:

    标签: web-services soa jdeveloper


    【解决方案1】:

    您可以这样做 - 将该参数 (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 转换为行(每行包含来自 XML 的一个国家/地区 ID)

    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 Suite 数据库适配器一起使用。

    【讨论】:

      【解决方案2】:

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

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

      SELECT U.A, U.B FROM C U WHERE U.A in ( SELECT SUBSTR ( STRING_TO_TOKENIZE , DECODE(LEVEL, 1, 1, INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL-1)+1) , INSTR(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_TOKENIZE , ',' 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, LEVEL-1)+1) , INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL) - 解码(LEVEL, 1, 1, INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL-1)+1) ) FROM (SELECT '1,2,3,4,5,6,7,8,9,10' || ',' AS STRING_TO_TOKENIZE , ',' 作为 DUAL 的分隔符)通过 INSTR 连接(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL )>0

      【讨论】:

        猜你喜欢
        • 2016-07-07
        • 1970-01-01
        • 1970-01-01
        • 2011-05-07
        • 2014-09-11
        • 1970-01-01
        • 1970-01-01
        • 2011-05-21
        • 1970-01-01
        相关资源
        最近更新 更多