2016-12-21 31 views
1

CLOBデータ型の「XMLdoc」という名前の列を含む「device」という名前の表があります。私は値フィールドを更新したい。Oracle DatabaseのSQLを使用したCLOBデータからのデータの抽出

名= "DropDirectory" 値= ""

/*Following is the sample XML:*/ 

<?xml version="1.0" encoding="UTF-8"?> 
<Attributes> 
    <Attribute DataType="Text-40" DisplayName="PrinterAlias" 
     IsNotDeletable="Y" Modifiable="Y" Name="PrinterAlias" Value="QALABHP"/> 
    <Attribute DisplayName="PrintServerHostName" 
     Name="PrintServerHostName" Value="zzzzz"/> 
    <Attribute DisplayName="PrintServerPort" Name="PrintServerPort" Value="2723"/> 
    <Attribute DataType="Text-40" DisplayName="DropDirectory" 
     IsNotDeletable="Y" Modifiable="Y" **Name="DropDirectory" Value=""/> 
</Attributes> 
+3

あなたの質問は何ですか? –

答えて

0

あなたは、Oracleのバージョンを指定していませんでした。私はそれが11gと仮定します。(注:12cを使用している場合は、おそらくXQueryを使用する必要があります)。

ここでは、値属性をnew_valueに更新します。

select xmlserialize(content updatexml(xmltype(
'<Attributes> 
    <Attribute DataType="Text-40" DisplayName="PrinterAlias" 
     IsNotDeletable="Y" Modifiable="Y" Name="PrinterAlias" Value="QALABHP"/> 
    <Attribute DisplayName="PrintServerHostName" 
     Name="PrintServerHostName" Value="zzzzz"/> 
    <Attribute DisplayName="PrintServerPort" Name="PrintServerPort" Value="2723"/> 
    <Attribute DataType="Text-40" DisplayName="DropDirectory" 
     IsNotDeletable="Y" Modifiable="Y" Name="DropDirectory" Value=""/> 
</Attributes>'), '/Attributes/Attribute[@Name="DropDirectory"]/@Value', 'new_value')) 
from dual 

結果(CLOB):

<Attributes> 
    <Attribute DataType="Text-40" DisplayName="PrinterAlias" IsNotDeletable="Y" Modifiable="Y" Name="PrinterAlias" Value="QALABHP" /> 
    <Attribute DisplayName="PrintServerHostName" Name="PrintServerHostName" Value="zzzzz" /> 
    <Attribute DisplayName="PrintServerPort" Name="PrintServerPort" Value="2723" /> 
    <Attribute DataType="Text-40" DisplayName="DropDirectory" IsNotDeletable="Y" Modifiable="Y" Name="DropDirectory" Value="new_value" /> 
</Attributes> 
1

あなたは以下のようにそれを更新することができます

選択:

SELECT extract(xmltype(col1), '/Attributes/Attribute[@Name="DropDirectory"]/@Value') 
    FROM test_clob; 

出力:

SQL> SELECT extract(xmltype(col1), '/Attributes/Attribute[@Name="DropDirectory"]/@Value') 
    FROM test_clob;  

EXTRACT(XMLTYPE(COL1),'/ATTRIBUTES/ATTRIBUTE[@NAME="DROPDIRECTORY"]/@VALUE') 
-------------------------------------------------------------------------------- 

更新:

UPDATE test_clob 
    SET col1 = UPDATEXML(xmltype(col1), 
    '/Attributes/Attribute[@Name="DropDirectory"]/@Value',to_char('google.com')).getClobVal() 

出力:

SQL>/

EXTRACT(XMLTYPE(COL1),'/ATTRIBUTES/ATTRIBUTE[@NAME="DROPDIRECTORY"]/@VALUE') 
-------------------------------------------------------------------------------- 
google.com 

注:鉱山であなたのテーブル名とColumnNameを交換してください。

+0

XMLType.getClobValメソッドは非推奨です。XMLSerializeを使用する必要があります。 – paulzip

関連する問題