“xml-> text-> xml”链可能很复杂,但在某些情况下可能会有所帮助(例如,当插入不是选项但仅更新时)。
您可以尝试使用varchar列的“n”和平(在目标表或不同的列中,远程数据库上的不同模式中的perheaps),其中“n”是:
ceil(max(dbms_lob.getlength(MyXmlColumn))/ 4000)
然后您可以将这些片段传输到远程临时字段:
public class OuterClass {
int i;
public void method1() {
System.out.println("Inside Method 1");
}
class InnerClass {
int j;
public void method2() {
System.out.println("Inside Method 2");
}
}
public static void main(String[] args) {
// To instantiate an inner class, you must first instantiate the outer class
OuterClass outerObject = new OuterClass();
outerObject.method1();
// Then, create the inner object within the outer object
OuterClass.InnerClass innerObject = outerObject.new InnerClass();
innerObject.method2();
}
}
XmlType可以从这样的片段重新组成:
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
最后使用结果更新remothe架构中的任何其他表,如:
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;