declare
-- 舊 Schema
oldSchemaDoc nvarchar2(2000) := '<xs:schema ...> ... </xs:schema>';
-- 新 Schema
newSchemaDoc nvarchar2(2000) := '<xs:schema ...> ... <xs:element name="Make" type="xs:string"/> ... <xs:enumeration value="小靈通"/> ... </xs:schema>';
diffXMLDoc clob;
v_schema_url nvarchar2(255) := 'https://www.OracleDemo.com/Phones.xsd';
begin
-- 1. 產生差異文件
select xmldiff(xmltype(oldSchemaDoc), xmltype(newSchemaDoc)).getClobVal()
into diffXMLDoc from dual;
-- 2. 就地演變 (11g 新功能,效能優於 copyEvolve)
DBMS_XMLSCHEMA.inPlaceEvolve(v_schema_url, xmltype(diffXMLDoc));
end;
xmldiff 比較產生差異 XML (CLOB)DBMS_XMLSCHEMA.inPlaceEvolve 套用差異,就地修改 SchemacopyEvolvexmldiff + inPlaceEvolveC# 修改類別定義 → 重新產生 XSD → 執行上述 PL/SQL → 完成資料庫 Schema 同步。