为什么 SPOOL 在将 LINESIZE 设置为 32767 的情况下写入我的输出?
Why is SPOOL writing my output with LINESIZE set to 32767?
我正在尝试假脱机处理某些数据,但由于某种原因它被换行到下一行。
这是我用来 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 参数来解决这个问题。
添加我的评论作为答案,因为它似乎有帮助。
尝试在 SET 命令之后和 SPOOL 之前添加:"COLUMN SCRIPT FORM A3000"。如果 sqlplus 默认列 SCRIPT 为 80,它将换行。
但是,进一步阅读似乎还有其他格式问题,而且数据似乎来自 DBMS_METADATA.GET_DLL。
我已经编写了很多工具(回到 v7)来将 DDL 提取到脚本中,以便可以重建模式,尽管 DBMS_METADATA.GET_DDL 是一个巨大的帮助,但我仍然发现它并不能完全完成事情整齐如你所愿。所以请注意。我的脚本结合了 GET_DDL 和一些自定义提取查询以获得干净可用的脚本。
要删除无关的换行符,请尝试这是您的会话:
exec DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'PRETTY',false);
这方面的文档是 here
我正在尝试假脱机处理某些数据,但由于某种原因它被换行到下一行。
这是我用来 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 参数来解决这个问题。
添加我的评论作为答案,因为它似乎有帮助。
尝试在 SET 命令之后和 SPOOL 之前添加:"COLUMN SCRIPT FORM A3000"。如果 sqlplus 默认列 SCRIPT 为 80,它将换行。
但是,进一步阅读似乎还有其他格式问题,而且数据似乎来自 DBMS_METADATA.GET_DLL。
我已经编写了很多工具(回到 v7)来将 DDL 提取到脚本中,以便可以重建模式,尽管 DBMS_METADATA.GET_DDL 是一个巨大的帮助,但我仍然发现它并不能完全完成事情整齐如你所愿。所以请注意。我的脚本结合了 GET_DDL 和一些自定义提取查询以获得干净可用的脚本。
要删除无关的换行符,请尝试这是您的会话:
exec DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'PRETTY',false);
这方面的文档是 here