我有一些查询要从模式中找出某些对象的 ddl。我得到的结果列在查询中间被截断。
如何增加列的宽度?
我试过了
SET SERVEROUTPUT ON SIZE 1000000;
SET LINESIZE 50000;
set pagesize 50000;
set long 50000;
但我仍然得到相同的结果。
我有一些查询要从模式中找出某些对象的 ddl。我得到的结果列在查询中间被截断。
如何增加列的宽度?
我试过了
SET SERVEROUTPUT ON SIZE 1000000;
SET LINESIZE 50000;
set pagesize 50000;
set long 50000;
但我仍然得到相同的结果。
我刚刚使用了以下命令:
SET LIN[ESIZE] 200
(来自http://ss64.com/ora/syntax-sqlplus-set.html)。
编辑:为清楚起见,有效命令是SET LIN 200
or SET LINESIZE 200
。
这很好用,但您必须确保您的控制台窗口足够宽。如果您直接从 MS Windows 命令提示符使用 SQL Plus,控制台窗口将自动在“屏幕缓冲区大小宽度”属性设置的任何位置换行,而不管任何 SQL PlusLINESIZE
规范。
正如@simplyharsh 所建议的那样,您还可以使用COLUMN col_name FORMAT Ax
(其中x是所需长度,以字符为单位)配置单个列以显示设置宽度 - 如果您有一两个超大列并且您只想显示摘要,这很有用它们在控制台屏幕中的值。
此配置对我有用:
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 个字符处截断。
试试这个
COLUMN col_name 格式 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
除了按照 LordScree 的建议设置 LINESIZE 之外,您还可以指定输出到文件,以克服控制台宽度的问题。这是我的做法:
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 上,你可以试试这个: