我想使用这个简单的函数读取表的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表示,包括约束和ref约束。
但是输出中缺少与此表关联的触发器。
任何人都可以给我一个提示,我必须做什么才能将触发器输入到output-xml中?
生成的XML应该在另一个数据库上使用,以比较表并使用DBMS_METADATA包构建diff-scripts。所以我需要使用“sxml”格式。