我正在尝试假脱机某些数据,但由于某种原因它会被包裹到下一行。
这是我用于SPOOL的脚本(我正在添加带有注释的完整脚本,以防它有任何意义)
SET SERVEROUTPUT ON FORMAT WRAPPED SIZE UNLIMITED
SET LONG 2000000000
SET LINESIZE 32767
SET VERIFY OFF
SET FEEDBACK OFF
SET TERMOUT OFF
SET HEADING OFF
SET ECHO OFF
SET PAGESIZE 0
SET NEWPAGE NONE
SET TRIMSPOOL ON
/* -------------------------------------------------- COMMENT --------------------------------------------------
COMMENT1
COMMENT2
COMMENT3
COMMENT4
COMMENT5
*/
SPOOL "File_Name_MySYNONYM_SCRIPT-11111111.sql"
select SCRIPT FROM MY_TABLE_2_UPDATE where OBJECT_ID =11111;
SPOOL OFF
SCRIPT是一个CLOB列,对于给定的ID包含:
CREATE OR REPLACE PUBLIC SYNONYM "MY_SYNONYM_12345" FOR "MS1"."MY_OBJECT1_SETUP";
这是我在假脱机文件中得到的输出:
CREATE OR REPLACE PUBLIC SYNONYM "MY_SYNONYM_12345" FOR "MS1"."MY_OBJECT1_SETU
P";
你可以看到 P“; 被包裹到第二行。该行实际上被包裹了,不是我的编辑器(Notepad ++)显示错误,我有”Word Wrap“停用。
我不知道我需要设置哪些其他SQL PLUS参数来解决此问题。
答案 0 :(得分:1)
添加我的评论作为答案,因为它似乎有所帮助。
尝试在SET命令之后和SPOOL之前添加:" COLUMN SCRIPT FORM A3000"。如果sqlplus默认列SCRIPT为80,它将换行。
然而,进一步阅读它似乎有其他格式问题,而且似乎数据来自DBMS_METADATA.GET_DLL。
我已经编写了很多工具(回到第7版)来将DDL提取到脚本中以便可以重建模式,虽然DBMS_METADATA.GET_DDL是一个巨大的帮助,但我仍然发现它并不能完成整个过程。整齐地按照你的意愿。所以要警告。我的脚本结合了GET_DDL和一些自定义提取查询,以获得漂亮的可用脚本。
要删除多余的换行符,请尝试以下方式:
exec DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'PRETTY',false);
此文档为here