Цепочка "xml-> text-> xml" может быть сложной, но может помочь в некоторых случаях (например, когда вставка не включена, а только обновляется).Вы можете попробовать с "n" мирами столбцов varchar (в таблице назначения или в другой сети, что происходит в другой схеме на удаленной БД), где "n": ceil (max (dbms_lob.getlength (MyXmlColumn))) / 4000)
Затем вы можете перенести эти фрагменты в удаленные временные поля:
insert into RemoteSchema.MyTable(Id, XmlPart1, XmlPart2,...)
(select 1 /*some Id*/,
dbma_lob.substr(MyXmlColumn.getclobval(), 4000, 1),
dbma_lob.substr(MyXmlColumn.getclobval(), 4000, 4001),
...
from LocalSchema.MyTable
XmlType может быть заново составлен из таких фрагментов:
create or replace function concat_to_xml(p_id number)
return xmltype
is
xml_lob clob;
xml xmltype;
begin
dbms_lob.createtemporary(xml_lob, true);
for r in (select XmlPart1, XmlPart2, ... from RemoteSchema.MyTable where Id = p_id)
loop
if r.XmlPart1 is not null then
dbms_lob.writeappend(xml_lob, length(r.XmlPart1), r.XmlPart1);
end if;
if r.XmlPart2 is not null then
dbms_lob.writeappend(xml_lob, length(r.XmlPart2), r.XmlPart2);
end if;
...
end loop;
xml := xmltype(xml_lob);
dbms_lob.freetemporary(xml_lob);
return xml;
end;
Наконец, используйте результат для обновления любой другой таблицы в схеме remothe, например:
update RemoteSchema.MyTable2 t2 set t2.MyXmlColumn = concat_to_xml(1 /*some Id*/);