Извлечение данных из данных 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>