如何增加 sqlplus 列输出长度?

Posted

技术标签:

【中文标题】如何增加 sqlplus 列输出长度?【英文标题】:how to increase sqlplus column output length? 【发布时间】:2011-11-15 03:13:52 【问题描述】:

我有一些查询要从架构中找出某些对象的 ddl。 我得到的结果列在查询中间被截断。

如何增加列宽?

我试过了

SET SERVEROUTPUT ON SIZE 1000000;
SET LINESIZE 50000;
set pagesize 50000;
set long 50000;

但我仍然得到相同的结果。

【问题讨论】:

【参考方案1】:

我刚刚使用了以下命令:

SET LIN[ESIZE] 200

(来自http://ss64.com/ora/syntax-sqlplus-set.html)。

编辑:为清楚起见,有效命令为SET LIN 200SET LINESIZE 200

这很好用,但您必须确保您的控制台窗口足够宽。如果您直接从 MS Windows 命令提示符使用 SQL Plus,控制台窗口将自动在“屏幕缓冲区大小 Width”属性设置的任何位置换行,无论任何 SQL Plus @987654325 @ 规范。

正如@simplyharsh 所建议的,您还可以使用COLUMN col_name FORMAT Ax(其中 x 是所需长度,以字符为单位)配置单个列以显示设置宽度 - 如果您有一个,这很有用或两个超大列,而您只想在控制台屏幕中显示它们的值的摘要。

【讨论】:

re "If ... SQL Plus direct from MS Windows Command Prompt ..." 我发现 "set longchunksize 1000" 修复了在 Windows 上发生在 80 处的截断 LOL 一开始我真的输入了SET LIN[ESIZE] 200 @Pluto 我已经修改了答案以澄清这一点。谢谢。 没问题,我花了一点时间才意识到自己犯了多么愚蠢的错误。起初我也没有阅读您答案的第二部分,这也有很大帮助。【参考方案2】:

此配置对我有用:

set termout off
set verify off
set trimspool on
set linesize 200
set longchunksize 200000
set long 200000
set pages 0
column txt format a120

带有linesize 选项的column 格式定义有助于避免在80 个字符处截断。

【讨论】:

【参考方案3】:

试试这个

COLUMN col_name FORMAT A24

24 是你的宽度。

【讨论】:

不错,但如果我给 A70。它每行打印 70 个字符。但是,我给出了 80 多个,它每行只打印 80 个字符 :(( 你确定这不是你的终端包装吗?【参考方案4】:

在 Linux 上试试这些:

set wrap off
set trimout ON
set trimspool on
set serveroutput on
set pagesize 0
set long 20000000
set longchunksize 20000000
set linesize 4000

【讨论】:

【参考方案5】:

除了设置 LINESIZE,正如 LordScree 建议的那样,您还可以指定输出到文件,以克服控制台宽度的问题。这是我的做法:

set linesize 15000;
spool myoutput.txt;
SELECT 
...
spool off;

【讨论】:

【参考方案6】:

实际上,即使那样对我也不起作用。当我执行“select dbms_metadata.get_ddl('TABLESPACE','TABLESPACE_NAME') from dual;”时我再次只得到了前三行,但这次每行都填充了 15,000 个字符。我能够解决这个问题:

select substr(dbms_metadata.get_ddl('TABLESPACE','LM_THIN_DATA'),80) from dual;
select substr(dbms_metadata.get_ddl('TABLESPACE','LM_THIN_DATA'),160) from dual;
select substr(dbms_metadata.get_ddl('TABLESPACE','LM_THIN_DATA'),240) from dual;

似乎应该有更简单的方法,但我似乎找不到。

【讨论】:

【参考方案7】:

我用什么:

set long 50000
set linesize 130

col x format a80 word_wrapped;
select dbms_metadata.get_ddl('TABLESPACE','LM_THIN_DATA') x from dual;

或者我错过了什么?

【讨论】:

【参考方案8】:

这对我来说就像一个 CLOB 专栏的魅力:

set long 20000000
set linesize 32767
column YOUR_COLUMN_NAME format a32767
select YOUR_COLUMN_NAME from YOUR_TABLE;

【讨论】:

【参考方案9】:

这些建议都不适合我。我终于找到了我可以做的其他事情 - dbms_output.put_line。例如:

SET SERVEROUTPUT ON
begin
for i in (select dbms_metadata.get_ddl('INDEX', index_name, owner) as ddl from all_indexes where owner = 'MYUSER') loop
  dbms_output.put_line(i.ddl);
end loop;
end;
/

轰隆隆。它打印出了我想要的一切——没有截断或类似的东西。这可以直接在 sqlplus 中使用 - 无需将其放在单独的文件或任何内容中。

【讨论】:

【参考方案10】:

在 Windows 上你可以试试这个:

在sqlplus窗口中右击 选择属性->布局 将屏幕缓冲区大小宽度增加到 1000

【讨论】:

以上是关于如何增加 sqlplus 列输出长度?的主要内容,如果未能解决你的问题,请参考以下文章

SQLPLUS 输出:如何自动获取每列的最小列宽?

Oracle sqlplus 语法

如何使用sqlplus在shell中存储存储过程返回的多个输出列

防止 sqlplus 截断列名,没有单独的列格式

在长原始列中插入值

sqlplus 添加列标题