![](/img/trans.png)
[英]How to retrieve specific chars after decimal using REGEX in Oracle SQL?
[英]Oracle SQL Query to retrieve specific Event using specific condition in xpath?
<List>
<Event>
<eventTime>2016-08-03T15:41:12.000+05:30</eventTime>
<e:PlaceHolder xmlns:e="http://dpmt.element.com">US</e:PlaceHolder>
<e:flag xmlns:e="http://dpmt.rmg.org/pq/rs">true</e:flag>
<e:flag1 xmlns:e="http://dpmt.rmg.org/pq/rs">false</e:flag1>
</Event>
<Event>
<eventTime>2016-08-01T19:41:12.000+05:30</eventTime>
</Event>
</List>
我已經以這種方式存儲了我的XML文檔,其中可能包含多個<Event>
標記,使用X-Path查詢,我只想獲取具有e:flag值true的那個事件,就我而言,我必須僅第一個事件標記使用where子句。 我需要按條件在where子句中使用EXTRACT或ExtractValue函數進行一般查詢,以檢查其標志值。
我正在以這種方式編寫查詢:
SELECT * FROM(SELECT EXTRACT(doc,'// List')。getClobVal()AS doc FROM my_table)T;
這將為您提供幫助; 標志標記使用空值進行測試。 功能中應添加其他值。
DECLARE
vs_Xml VARCHAR2(32000):= '<List>
<Event>
<eventTime>2016-08-03T15:41:12.000+05:30</eventTime>
<e:PlaceHolder xmlns:e="http://dpmt.element.com">US</e:PlaceHolder>
<e:flag xmlns:e="http://dpmt.rmg.org/pq/rs">true</e:flag>
<e:flag1 xmlns:e="http://dpmt.rmg.org/pq/rs">false</e:flag1>
</Event>
<Event>
<eventTime>2016-08-01T19:41:12.000+05:30</eventTime>
</Event>
</List>';
vx_ParameterList XMLTYPE;
vx_Parameter XMLTYPE;
vn_ParameterIndex NUMBER;
vs_Key VARCHAR2(64);
vs_XPath VARCHAR2(255);
vs_Value VARCHAR2(10000);
vs_Value2 VARCHAR2(10000);
BEGIN
vx_ParameterList := xmltype(vs_Xml);
vn_ParameterIndex := 1;
vs_XPath := '/List/Event';
WHILE vx_ParameterList.existsNode(vs_XPath || '[' || vn_ParameterIndex || ']') = 1 LOOP
vx_Parameter := vx_ParameterList.extract(vs_XPath || '[' || vn_ParameterIndex || ']');
vs_Value := vx_Parameter.extract('//eventTime/text()').GetStringVal();
SELECT vx_Parameter.extract('//flag/text()', 'xmlns:e="http://dpmt.rmg.org/pq/rs"').GetStringVal() INTO vs_Value2 FROM DUAL; --Null value handling
vn_ParameterIndex := vn_ParameterIndex + 1;
dbms_output.put_line(vs_Value ||'-' || vs_Value2);
END LOOP;
END;
/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.