如何增加 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 200
或SET 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 列输出长度?的主要内容,如果未能解决你的问题,请参考以下文章