我想使用这个简单的函数读取表的 SXML 表示:
CREATE OR REPLACE FUNCTION get_table_sxml(name IN VARCHAR2) RETURN CLOB IS
open_handle NUMBER;
transform_handle NUMBER;
doc CLOB;
BEGIN
open_handle := DBMS_METADATA.OPEN('TABLE');
DBMS_METADATA.SET_FILTER(open_handle,'NAME',name);
transform_handle := DBMS_METADATA.ADD_TRANSFORM(open_handle, 'SXML');
dbms_metadata.set_transform_param(transform_handle,'REF_CONSTRAINTS', true);
dbms_metadata.set_transform_param(transform_handle,'CONSTRAINTS', true);
doc := DBMS_METADATA.FETCH_CLOB(open_handle);
DBMS_METADATA.CLOSE(open_handle);
RETURN doc;
END;
当我使用“ SELECT get_table_sxml('TABLENAME') FROM dual ”选择生成的 XML 时,我得到了完整的 xml 表示,包括约束和引用约束。
但是,输出中缺少与此表关联的触发器。
谁能给我一个提示我必须做什么才能将触发器放入输出xml?
生成的 XML 应该用于另一个数据库来比较表并使用 DBMS_METADATA 包构建差异脚本。所以我需要使用“sxml”格式。