Извлечение данных из данных CLOB с использованием SQL из базы данных Oracle

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

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>

2 ответа

Вы можете обновить его, как показано ниже:

Выбрать:

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

Примечание: замените ваше имя таблицы и имя столбца на мое.

Вы не указали свою версию 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>
Другие вопросы по тегам