2016-12-21 3 views
1

У меня есть таблица с именем «устройство», которая содержит столбец с именем «XMLdoc» типа данных CLOB. Я хочу обновить поле «Значение».Извлечение данных из данных CLOB с использованием SQL из базы данных Oracle

Name = "DropDirectory" Value = ""

/*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).

Здесь я обновляю атрибут Value до 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:

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