为什么SPOOL将LINESIZE的输出设置为32767?

时间:2015-06-18 13:49:27

标签: oracle sqlplus

我正在尝试假脱机某些数据,但由于某种原因它会被包裹到下一行。

这是我用于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参数来解决此问题。

1 个答案:

答案 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