0
 <wbi:appData>
     <wbi:content wbi:name="1st_status">
         <wbi:value xsi:type="xsd:string">Success</wbi:value>
     </wbi:content>
</wbi:appData>

このxmlは、CLOB型の形式の列を持つテーブルにあります。

「wbi:value」タグがこのxmlに存在するかどうかを確認したかったのですか?

私はexistsnodeを使用しようとしましたが、SQL Developerでは、existsnodeを宣言する際にエラーが発生します。

4

4 に答える 4

3

はいexistsnodeを使用します:

SQL> with yourdata as (select to_clob('<wbi:event xmlns:wbi="http://foo" xmlns:xsi="http://x" xmlns:xsd="http://d">
  2  <wbi:appData>
  3      <wbi:content wbi:name="1st_status">
  4          <wbi:value xsi:type="xsd:string">Success</wbi:value>
  5          </wbi:content>
  6      <wbi:content wbi:name="2nd_status">
  7          <wbi:value xsi:type="xsd:string">Failure</wbi:value>
  8          </wbi:content>
  9      </wbi:appData>
 10  </wbi:event>') c from dual)
 11  select existsnode(xmltype(c), '/wbi:event/wbi:appData/wbi:content','xmlns:wbi="http://foo"')  is_exist
 12    from yourdata t
 13  /

  IS_EXIST
----------
         1

すなわち

existsnode(xmltype(c), '/wbi:event/wbi:appData/wbi:content','xmlns:wbi="http://foo"')

1=存在する0=存在しない。

私のサンプルでは、​​2つの一致するノードがあったことに注意してください(wbi:nameでフィルタリングしなかったため)。もちろん、xpathをフィルタリングできます。例えば:

/wbi:event/wbi:appData/wbi:content[@wbi:name="1st_status"]

一致を「1st_status」のものに制限します

于 2012-12-13T16:30:51.790 に答える
1
select count(*) 
 from clobtab
where existsNode(xmltype.createxml(clobcol),'/wbi:appData/wbi:content/wbi:value') = 1;

それが0を超えて再発する場合、それ以外の場合は存在しません。

だからあなたのトリガーは-

CREATE TRIGGER Tab_a 
BEFORE INSERT 
FOR EACH ROW 
declare 
   xml_a xmltype; 
begin 
   xml_a:=xmltype(:new.value); 
   if existsNode(xml_a,'/wbi:appData/wbi:content/wbi:value','xmlns:wbi="http://pat.namespace.com"') = 1
   then 
     ----insert .... 
   end if;
end;
于 2012-12-13T16:14:58.557 に答える
0

実際には、高速なoracleのinstr関数を使用できます。

お気に入り:

where instr(field, 'wbi:value') > 0
于 2012-12-13T16:39:15.450 に答える
0

XMLEXISTSを使用できます:

SELECT DESCRIPTOR_XML FROM TABLE_WITH_AN_XMLTYPE_COLUMN
WHERE
  XMLEXISTS('//functions[function/arg[@name="class.name" and not(starts-with(., "com.example.apps.YouShantSeeMeClass"))]]'
  PASSING BY VALUE DESCRIPTOR_XML);
于 2014-02-24T12:19:40.413 に答える