1

我想使用这个简单的函数读取表的 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”格式。

4

0 回答 0