【发布时间】:2011-11-15 03:13:52
【问题描述】:
我有一些查询要从架构中找出某些对象的 ddl。 我得到的结果列在查询中间被截断。
如何增加列宽?
我试过了
SET SERVEROUTPUT ON SIZE 1000000;
SET LINESIZE 50000;
set pagesize 50000;
set long 50000;
但我仍然得到相同的结果。
【问题讨论】:
标签: sql oracle sqlplus column-width
我有一些查询要从架构中找出某些对象的 ddl。 我得到的结果列在查询中间被截断。
如何增加列宽?
我试过了
SET SERVEROUTPUT ON SIZE 1000000;
SET LINESIZE 50000;
set pagesize 50000;
set long 50000;
但我仍然得到相同的结果。
【问题讨论】:
标签: sql oracle sqlplus column-width
我刚刚使用了以下命令:
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 是所需长度,以字符为单位)配置单个列以显示设置宽度 - 如果您有一个,这很有用或两个超大列,而您只想在控制台屏幕中显示它们的值的摘要。
【讨论】:
SET LIN[ESIZE] 200
此配置对我有用:
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 个字符处截断。
【讨论】:
试试这个
COLUMN col_name FORMAT A24
24 是你的宽度。
【讨论】:
在 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
【讨论】:
除了设置 LINESIZE,正如 LordScree 建议的那样,您还可以指定输出到文件,以克服控制台宽度的问题。这是我的做法:
set linesize 15000;
spool myoutput.txt;
SELECT
...
spool off;
【讨论】:
实际上,即使那样对我也不起作用。当我执行“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;
似乎应该有更简单的方法,但我似乎找不到。
【讨论】:
我用什么:
set long 50000
set linesize 130
col x format a80 word_wrapped;
select dbms_metadata.get_ddl('TABLESPACE','LM_THIN_DATA') x from dual;
或者我错过了什么?
【讨论】:
这对我来说就像一个 CLOB 专栏的魅力:
set long 20000000
set linesize 32767
column YOUR_COLUMN_NAME format a32767
select YOUR_COLUMN_NAME from YOUR_TABLE;
【讨论】:
这些建议都不适合我。我终于找到了我可以做的其他事情 - 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 中使用 - 无需将其放在单独的文件或任何内容中。
【讨论】:
在 Windows 上你可以试试这个:
【讨论】: