クエリは次のように与えられた文字列のクエリに置き換えます。 私が達成したいのは、統合クエリを作成し、上の式の最初に何かを追加することです。Oracleの正規表現は、私のテーブルのCLOB列に保存されたXMLからサブXMLをフェッチする
ie。 "SO1_USERNAME" value="qwexxx"
クエリは次のように与えられた文字列のクエリに置き換えます。 私が達成したいのは、統合クエリを作成し、上の式の最初に何かを追加することです。Oracleの正規表現は、私のテーブルのCLOB列に保存されたXMLからサブXMLをフェッチする
ie。 "SO1_USERNAME" value="qwexxx"
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>
親切な助けをありがとうございますが、問題があります。私は戻ってくる 'XML'にもユーザ名を追加したい。この場合は「SO1_USERNAME」の値=「ABC222671150」「 助けてください。 – user3081780
これを行うには文字列連結を使用してください: 'xml || 'SO1_USERNAME "value ="' || SO1_USERNAME || '"' ' – MT0
あなたが提供したクエリを実行したときに、私は' SO1_USERNAME'にnullを取得しています。 – user3081780
あなたは、いくつかのSAMPを提供することができデータと期待される出力を – Matt
XPathに '/ *'を追加すると、 'xmltype(t.prov_request).extract( '// SOAP_Domain_Msg/Body/*')のように' REGEXP_REPLACE'を取り除くことができます。 ).getStringVal() ' – MT0
@ MT0パーフェクトサー。それはうまくいったが、それはその一部である。同じクエリで返された文字列に対してreplace関数を適用したいと思います。すなわちStringには "SO1_USERNAME" value = "xxx" 'が含まれており、' 'SO1_USERNAME" value = "123xxx" 'のような文字列に少数の文字を追加したいとします。私はそうすることができませんでした。 – user3081780