簡體   English   中英

從Clob查詢XML並將其與表(DB2)聯接

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

我有一個這樣的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>

該表具有以下結構:

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

所述xml存儲在每個clob列中。

我想做的是搜索一個值,然后將其與常規表連接。

我試圖實現的查詢是這樣的:

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;

因為我將在其他一些代碼中使用此查詢,所以它無權訪問DB2控制台。

我該如何實現?

謝謝。

由於此:

使用db2中的SQL從XML Clob中提取數據

我能夠得到這個:

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;

這使我可以查詢所需信息。

謝謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM