2015-06-18 249 views
0

我正在试图缓冲某些数据,但由于某种原因它会被缠绕到下一行。为什么使用LINESIZE将SPOOL写入输出设置为32767?

这是我使用的卷筒上的脚本(我加入的全部脚本注释的情况下,它又有什么意义)

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 

脚本是一个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

可能的答案:http://dba.stackexchange.com/questions/54149/how -to-make-sqlplus-output-appear-in-one-line – Rene

+0

where is create statement? – Ravi

+0

@jWeaver - 对不起,但我不明白你的问题?该创建语句是假脱机输出,保存在“File_Name_MySYNONYM_SCRIPT-11111111.sql”文件中。这是你指的是什么? – Dzyann

回答

1

添加我的评论作为答案,因为它似乎有帮助。

尝试在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

这里
+0

是的,你很紧我的查询来自DMBS.GET_DDL。自定义提取查询的含义是什么? – Dzyann

+0

@Dzyann - 我的意思是自定义提取查询是,而不是使用GEL_DDL我编写自己的SQL来直接从DBA_SOURCE,DBA_TRIGGERS等获取DDL,其中GET_DDL不像我想的那样工作。例如,在使用PLSQL代码时,我发现代码库有奇怪的代码(由TOAD爱好者和他们的mongrel代码格式引起)混淆了GET_DDL,因此我直接查询了DBA_SOURCE。同义词和赠款必须直接提取以确保脚本完整。 – TenG

+0

谢谢澄清。我对Oracle的所有这些东西仍然是新的。感谢您的建议。到目前为止,我很幸运,我遇到的唯一问题是额外的空间。 – Dzyann

相关问题