【问题标题】:how to increase sqlplus column output length?如何增加 sqlplus 列输出长度?
【发布时间】: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


    【解决方案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

                  【讨论】:

                    猜你喜欢
                    • 2020-03-12
                    • 2015-01-10
                    • 2012-05-02
                    • 2023-02-03
                    • 2017-12-01
                    • 2020-06-12
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多