我試圖在SQL表(BLOB)的一個XML二進制型別的列中搜索一個給定的值。
該表有 3000條記錄。我需要從一個看起來像這樣的XML中尋找與/properties/ip/中的一個特定IP相對應的所有值:
該表有 3000條記錄。
<?xml version="1.0" encoding="UTF-8"? >
<properties>/span>
<port>8000</port>/span>
<ip>/span>12.345.67.80</ip>/span>
</properties>/span>
到目前為止,我已經能夠得到一些輸出,但不是我所需要的(我只能運行帶有最后一個WHERE條款的查詢,不能沒有):
SELECT
d.*,
extractvalue(xmltype(d.CONFIGURATION,nls_charset_id('AL32UTF8')),'properties/ip') as ip_lookup
FROM[/span
AZ.DEVICES d
WHERE[/span
NAME = 'Door-Entrance'/span>;
我對尋找所有具有特定IP的記錄很感興趣,所以像這樣:
我對尋找所有具有特定IP的記錄很感興趣。
SELECT
d.*,
extractvalue(xmltype(d.CONFIGURATION,nls_charset_id('AL32UTF8')),'properties/ip') as ip_lookup
FROM[/span
AZ.DEVICES d
WHERE
ip_lookup = '12.345.67.80'/span>;
有什么想法嗎?
uj5u.com熱心網友回復:
你可以使用XMLTABLE這是Oracle推薦的,而不是被廢棄的
函式XMLSEQUENCE或EXTRACTVALUE,如
WITH devices(configuration,name) as
(SELECT XMLType('<?xml version="1.0" encoding="UTF-8"? >
<屬性>
<port>8000</port>
<ip>12.345.67.80</ip>
</properties>')。)
"Door-Entrance'"。
FROM dual)
SELECT ip
FROM devices,
XMLTABLE('/properties' PASSING devices.configuration COLUMNS "IP"
VARCHAR2(50) PATH 'ip')
WHERE name = 'Door-Entrance'。
uj5u.com熱心網友回復:
你可以使用XMLTABLE和WHERE子句中的任一過濾器:
SELECT *
FROM AZ.devices d
CROSS APPLY XMLTABLE(
'/properties'/span>
PASSING XMLTYPE(d.configuration,nls_charset_id('UTF8')
COLUMNS
port NUMBER(5,0) PATH ' ./port'。
ip VARCHAR2(15) PATH './ip'.
) x
WHERE x.ip = '12.345.67.80';
或者在XPath中:
SELECT *
FROM AZ.devices d
CROSS APPLY XMLTABLE(
'/properties[ip="12.345.67.80"]'
PASSING XMLTYPE(d.configuration,nls_charset_id('UTF8')
COLUMNS
port NUMBER(5,0) PATH ' ./port'。
ip VARCHAR2(15) PATH './ip'.
) x
其中,對于示例資料:
CREATE TABLE AZ.devices (
name VARCHAR2(30)。
配置 BLOB INSERT INTO AZ.devices (name, configuration)
VALUES (
'Door-Entrance',
UTL_RAW.CAST_TO_RAW('<?xml version="1.0" encoding="UTF-8"? >
<屬性>
<port>8000</port>
<ip>12.345.67.80</ip>
</properties>')
);
兩種輸出:
名稱 CONFIGURATION 埠IP_LOOKUP<?xml version="1.0" encoding="UTF-8"?> >
<properties>
<port>8000</port>
<ip>12. 345.67.80</ip>
</properties>8000 12.345.67.80
db<>fiddle here
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/322157.html
標籤:
下一篇:根據用戶輸入的數值顯示列數
