我的数据库中有这个xml:
<requestXML>
<headers>
<name>Accept</name>
<value>text/plain, application/json, application/*+json, */*</value>
</headers>
<method>PUT</method>
<payload>{"timestamp":"1659167441820","orderIdentifierCode":"OC22004795","clientName":"XXXX","country":"XX","vatNumber":"XXXXXXXX","orderDate":"XX/XX/XXXX","orderState":"XX"}</payload>
<threadName>default task-xx</threadName>
<url>http://localhost:8080/service_name</url>
</requestXML>
我试着用XMLExists执行SELECT语句,但是没有结果。我需要的是搜索<payload>
标记,在那些json主体中,orderIdentifierCode
值。
这里是我的SELECT:
SELECT * FROM EVDA.TETSIR_LOG_WS_PBE
AS X
WHERE XMLExists('$XML//requestXML/payload[orderIdentifierCode="OC22004795"]' passing X.T_RIC_XML AS "XML")
AND D_TMS_REG BETWEEN '2022-07-27 00:00:00.000001' AND '2022-08-02 23:59:59.999999'
WITH UR;
相反,这一个工作得很好:
SELECT * FROM EVDA.TETSIR_LOG_WS_PBE
AS X
WHERE XMLExists('$XML//requestXML[method="PUT"]' passing X.T_RIC_XML AS "XML")
AND D_TMS_REG BETWEEN '2022-07-27 00:00:00.000001' AND '2022-08-02 23:59:59.999999'
WITH UR;
我开始认为第一个没有很好的格式,或者由于标记<payload>
中的复杂值而缺少了一些东西。
猜猜看?
先谢谢你
1条答案
按热度按时间osh3o9ms1#
您必须先获取JSON值,然后再使用它。
根据数据库代码页运行下面的语句。
仅限UTF-8数据库
所有数据库编码
您必须在非Unicode数据库中使用旧版的SYSTOOLS.JSON2BSON函数。
更好的方法是不使用SYSTOOLS JSON函数,所以,如果你有UTF-8数据库,最好使用上面的语句。
看起来,SYSIBM.JSON_TABLE在非unicode数据库中不起作用。