简体   繁体   English

从Clob查询XML并将其与表(DB2)联接

[英]Query XML from a Clob and join it with a table (DB2)

I have an xml like this stored in a table: 我有一个这样的XML存储在表中:

<xml>
     <attribute>name</attribute>
     <value>this is my xml</value>
     <logLocation>/user/apps/myLogFolder</logLocation>
     <engines>
        <engine>
            <engineName>Engine1</engineName>
            <engineLocation>$HOME/apps/engines</engineLocation>
            <engineVersion>3.1416</engineVersion>
        </engine>
        <engine>
            <engineName>Engine2</engineName>
            <engineLocation>$HOME/apps/engines/backup</engineLocation>
            <engineVersion>3b</engineVersion>
        </engine>
    </engines>
    <connections>
        <connection>
        <jdbc>jdbc:db2://127.0.0.1:50000/localdb</jdbc>
        <user>dbuser</user>
        <password>{}</password>
        </connection>
    </connections>
</xml>

The table has the following structure: 该表具有以下结构:

id         | xmlText        |
(integer)  | (clob)         |
---------- | -------------- |
1          | [clob]         |
2          | [clob]         |
---------- | -------------- |

Said xmls are stored in each clob column. 所述xml存储在每个clob列中。

What I am trying to do is to search for a value and then join it with a regular table. 我想做的是搜索一个值,然后将其与常规表连接。

The query I am trying to achieve is something like this: 我试图实现的查询是这样的:

select
    t1.*,
    xmlValues.logLocation
from
    schema.table t1,
    (
        XMLTABLE
        (
        SELECT
            id,
            xmlserialize(xmltext AS VARCHAR(3000)) as xmlValues
        FROM
            schema.myXMLTable
        WHERE
            id = t1.id
        FETCH FIRST ROW ONLY
        )
    ) xmlValues
where
    t1.id = 1;

Since I this query will be used in some other code, it won't have access to the DB2 console. 因为我将在其他一些代码中使用此查询,所以它无权访问DB2控制台。

How can I achieve it? 我该如何实现?

Thanks. 谢谢。

Thanks to this: 由于此:

Extract data from XML Clob using SQL from db2 使用db2中的SQL从XML Clob中提取数据

I was able to get this: 我能够得到这个:

select
    myJoinTable.objectName,
    myJoinTable.objectType,
    xmlTableValues.jdbcString,
    xmlTableValues.logPath
from
    myJoinTable,
    (
        SELECT
            tb1.id as id
            xmlField.jdbcString as jdbcString,
            xmlField.logPath as logPath
        FROM myTable tb1,
            XMLTABLE(
                '$xmlDoc/xml/connections' PASSING XMLPARSE(DOCUMENT tb1.xmlText) AS "xmlDoc"
                COLUMNS 
                jdbcString varchar(200) PATH 'connection[1]/jdbc',
                logPath varchar(500) PATH '../logLocation'
            ) AS xmlField
        ) xmlValuesTable
    ) xmlTableValues
where
    myJoinTable.objectID = X
    and
        myJoinTable.objectID = xmlTableValues.id;

Which allows me to query what I need. 这使我可以查询所需信息。

Thanks. 谢谢。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM