2016-05-09 3 views
0

クエリは次のように与えられた文字列のクエリに置き換えます。 私が達成したいのは、統合クエリを作成し、上の式の最初に何かを追加することです。Oracleの正規表現は、私のテーブルのCLOB列に保存されたXMLからサブXMLをフェッチする

ie。 "SO1_USERNAME" value="qwexxx"

+2

あなたは、いくつかのSAMPを提供することができデータと期待される出力を – Matt

+0

XPathに '/ *'を追加すると、 'xmltype(t.prov_request).extract( '// SOAP_Domain_Msg/Body/*')のように' REGEXP_REPLACE'を取り除くことができます。 ).getStringVal() ' – MT0

+0

@ MT0パーフェクトサー。それはうまくいったが、それはその一部である。同じクエリで返された文字列に対してreplace関数を適用したいと思います。すなわちStringには "SO1_USERNAME" value = "xxx" 'が含まれており、' 'SO1_USERNAME" value = "123xxx" 'のような文字列に少数の文字を追加したいとします。私はそうすることができませんでした。 – user3081780

答えて

0

Oracleのセットアップ

CREATE TABLE tbl_prov_comptl (prov_request CLOB); 

INSERT INTO tbl_prov_comptl VALUES (
    '<SOAP_Domain_Msg><Body><NS4:ModifyRequest xmlns:NS4="http://soa.comptel.com/2011/02/instantlink"><NS4:RequestParameters> <NS4:Parameter name="SO1_USERNAME" value="222671150"/></NS4:RequestParameters> </NS4:ModifyRequest></Body></SOAP_Domain_Msg>' 
); 

クエリ

SELECT EXTRACTVALUE(
     xml, 
     '//NS4:ModifyRequest/NS4:RequestParameters/NS4:Parameter[name="SO1_USERNAME"]/@value', 
     'xmlns:NS4="http://soa.comptel.com/2011/02/instantlink"' 
     ) AS SO1_USERNAME, 
     x.xml.getStringVal() AS xml 
FROM (
    SELECT XMLType(prov_request).extract('//SOAP_Domain_Msg/Body/*') AS xml 
    FROM tbl_prov_comptl 
) x; 

出力

SO1_USERNAME XML 
------------ ------------------------------------------------------------------------------ 
222671150 <NS4:ModifyRequest xmlns:NS4="http://soa.comptel.com/2011/02/instantlink"><NS4 
      :RequestParameters> <NS4:Parameter name="SO1_USERNAME" value="222671150"/></NS 
      4:RequestParameters> </NS4:ModifyRequest> 
+0

親切な助けをありがとうございますが、問題があります。私は戻ってくる 'XML'にもユーザ名を追加したい。この場合は「SO1_USERNAME」の値=「ABC222671150」「 助けてください。 – user3081780

+0

これを行うには文字列連結を使用してください: 'xml || 'SO1_USERNAME "value ="' || SO1_USERNAME || '"' ' – MT0

+0

あなたが提供したクエリを実行したときに、私は' SO1_USERNAME'にnullを取得しています。 – user3081780

関連する問題