Db2 9.1 zos 上的 SOAPHTTPNV

Posted

技术标签:

【中文标题】Db2 9.1 zos 上的 SOAPHTTPNV【英文标题】:SOAPHTTPNV on Db2 9.1 zos 【发布时间】:2013-01-02 15:43:01 【问题描述】:

我正在使用函数 SOAPHTTPNV 从 zOS 上的 Db2 9.1 调用 Web 服务。 结果返回ok,但是webservice被调用了多次, 结果集中的每一行(或响应中元素 ROW 的出现)一次。 这是为什么呢?

SQL

SELECT T.NR_KAT, T.PNR_F
FROM
XMLTABLE(
xmlnamespaces ('http://schemas.xmlsoap.org/soap/envelope/' AS
"soap",
'http://schemas/SERVICE/100921' AS "p"),
'$d/soap:Envelope/soap:Body/p:SERVICE_RESPONSE/p:document/p:result/p:ROW'
PASSING XMLPARSE(
DOCUMENT DB2XML.SOAPHTTPNV(
'http://serviceurl',
VARCHAR(''),
VARCHAR('<soap:Envelope
    request_simplified
</soap:Envelope>'
))) AS "d"
COLUMNS
NR_KAT VARCHAR(2) PATH 'p:NR_KAT',
PNR_F  VARCHAR(12) PATH 'p:PNR_F'
) AS T
;

SPUFI中SQL的结果

NR_KAT  PNR_F
---------+---------+---------+---------+------
09      194513051834
08      194515042978
19      194515300398

来自 web 服务的 xml 响应

<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
        <Body>
    <SERVICE_RESPONSE xmlns="http://schemas/SERVICE/100921">
         <document>
             <result>
                 <ROW>
                    <NR_KAT>09</NR_KAT>
                    <PNR_F>194513051834</PNR_F>
                </ROW>
                 <ROW>
                    <NR_KAT>08</NR_KAT>
                    <PNR_F>194515042978</PNR_F>
                </ROW>
                 <ROW>
                    <NR_KAT>19</NR_KAT>
                        <PNR_F>194515300398</PNR_F>
                    </ROW>    
                    </result>
        </document>
    </SERVICE_RESPONSE>
    </Body>
    </Envelope>

【问题讨论】:

【参考方案1】:

尝试使用 XMLTABLE 函数的 BY REF 子句:

SELECT T.NR_KAT, T.PNR_F
FROM XMLTABLE(xmlnamespaces ('http://schemas.xmlsoap.org/soap/envelope/' AS "soap",
                             'http://schemas/SERVICE/100921'             AS "p"),
              '$d/soap:Envelope/soap:Body/p:SERVICE_RESPONSE/p:document/p:result/p:ROW'
              PASSING BY REF XMLPARSE(...))) AS D
              COLUMNS NR_KAT VARCHAR(2)  PATH 'p:NR_KAT',
                      PNR_F  VARCHAR(12) PATH 'p:PNR_F') AS T
;

【讨论】:

谢谢,但与 BY REF 的结果相同。实际上,我现在注意到服务返回的每一行都调用了一次 + 1。我还尝试从服务中获取结果作为一行,在 httpEnvelope 级别上,然后我看到该服务被调用了两次。【参考方案2】:

该症状与 APAR PM52237 中描述的症状相符。 APAR PM52237 解决了为 XMLTABLE 返回的每一行调用 XMLTABLE 函数的参数的问题。请确保您的 z/OS 系统上已安装 PTF UK77921(适用于 DB2 9)。

【讨论】:

以上是关于Db2 9.1 zos 上的 SOAPHTTPNV的主要内容,如果未能解决你的问题,请参考以下文章

DB2 Zos 浅谈 - DB2 LUW VS DB2 Zos

使用 PHP Cloud Foundry 应用程序连接到 IBM zOS 系统/DB2 表

DB2 v10 zos:识别空闲索引值

sql DB2 for zOS PLAN情报

sql DB2 for zOS EXPLAIN情报抽出

sql DB2 for zOSパッケージ情报抽出