好吧,如果sqlplus正在拧紧dbms_metadata.get_ddl输出,为什么不选择CLOB中的输出并将CLOB写入文件系统。
例如
DECLARE
data CLOB;
objType varchar2(30) := 'TABLE';
objSchema varchar2(30) := 'SCOTT';
objName varchar2(30) := 'EMP';
fname varchar2(256) := objType || '_' || objSchema || '_' || objName || '.sql';
BEGIN
SELECT dbms_metadata.get_ddl(objType,objName,objSchema) into data from dual;
DBMS_XSLPROCESSOR.CLOB2FILE(data,'DATA_PUMP_DIR',fname);
END;
/
这应该使您获得正确的DDL,而不会弄乱输出。唯一的是,该脚本将在DB服务器上而不是在调用sqlplus的客户端上创建。
该脚本将保存在DB Server上“ DATA_PUPM_DIR”条目指向的目录中。即
select directory_path from all_directories where directory_name like 'DATA_PUMP_DIR';
而且,您可以在模式的所有表/索引等上添加某种迭代,并立即获得完整模式的DDL。我一直都在做。