67

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

如何增加列的宽度?

我试过了

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

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

4

10 回答 10

82

我刚刚使用了以下命令:

SET LIN[ESIZE] 200

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

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

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

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

于 2012-08-23T08:31:00.027 回答
32

此配置对我有用:

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

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

于 2013-09-03T19:10:59.527 回答
14

试试这个

COLUMN col_name 格式 A24

其中 24 是你的宽度。

于 2011-09-12T08:00:04.403 回答
10

在 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
于 2015-08-03T09:18:06.787 回答
4

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

set linesize 15000;
spool myoutput.txt;
SELECT 
...
spool off;
于 2013-01-24T12:24:48.710 回答
2

实际上,即使那样对我也不起作用。当我执行“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;

确实似乎应该有一个更简单的方法,但我似乎找不到它。

于 2013-04-12T18:42:31.523 回答
2

我用什么:

set long 50000
set linesize 130

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

还是我错过了什么?

于 2015-03-05T21:56:53.597 回答
2

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

set long 20000000
set linesize 32767
column YOUR_COLUMN_NAME format a32767
select YOUR_COLUMN_NAME from YOUR_TABLE;
于 2019-10-24T12:20:13.703 回答
0

这些建议都不适合我。我终于找到了我可以做的其他事情 - 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- 无需将其放在单独的文件或任何东西中。

于 2018-01-19T21:16:51.377 回答
-4

在 Windows 上,你可以试试这个:

  • 在 sqlplus 窗口中单击鼠标右键
  • 选择属性->布局
  • 将屏幕缓冲区大小宽度增加到 1000
于 2015-02-07T06:10:13.573 回答