调整 PL/SQL 输出的格式

Posted

技术标签:

【中文标题】调整 PL/SQL 输出的格式【英文标题】:Adjusting the format of PL/SQL output 【发布时间】:2016-03-19 00:20:31 【问题描述】:
FOR rec_c IN cus_cur LOOP
 DBMS_OUTPUT.PUT_LINE(TO_CHAR(rec_c.CNO)||'  '||rec_c.person.name||'   '||rec_c.person.address.street||'   '||TO_CHAR(rec_c.person.address.zip));
FOR i IN 1..rec_c.person.phones.count loop
DBMS_OUTPUT.put_LINE(rec_c.person.phones(i));
END LOOP;
END LOOP;

下图是代码的输出:

如何管理如下图所示的输出?

【问题讨论】:

您不必费心将图像中的文本复制到帖子中,以便人们利用空闲时间回答您的问题。你在扯我的链子 使用DBMS_OUTPUT.PUT()(而不是DBMS_OUTPUT.PUT_LINE()),如果你把它和RPAD( value, width, ' ' )结合起来,那么你应该得到你的答案。 【参考方案1】:

类似:

FOR rec_c IN cus_cur LOOP
  DBMS_OUTPUT.PUT( RPAD( rec_c.CNO,                    6, ' ' ) );
  DBMS_OUTPUT.PUT( RPAD( rec_c.person.name,           11, ' ' ) );
  DBMS_OUTPUT.PUT( RPAD( rec_c.person.address.street, 14, ' ' ) );
  DBMS_OUTPUT.PUT( RPAD( rec_c.person.address.zip,     7, ' ' ) );

  IF rec_c.person.phones IS NOT EMPTY THEN
    DBMS_OUTPUT.PUT_LINE(rec_c.person.phones(1));
    FOR i IN 2..rec_c.person.phones.count LOOP
      DBMS_OUTPUT.PUT_LINE( RPAD( ' ', 38, ' ' ) );
      DBMS_OUTPUT.PUT_LINE(rec_c.person.phones(i));
    END LOOP;
  ELSE
    DBMS_OUTPUT.PUT_LINE( NULL );
  END IF;
END LOOP;

【讨论】:

【参考方案2】:

在 sqlplus 中执行上述块之前,只需将 linesize 设置为 200 或更大,例如:

set linesize 200;
set serveroutput on;
Begin
  -- Your code
End;
/

【讨论】:

以上是关于调整 PL/SQL 输出的格式的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PL SQL 输出这种 XML 格式

PL/SQL 游标 (实验七)

PL/SQL 过程中带有 IN OUT 参数的意外结果

去掉 PL/SQL 函数末尾的逗号 [Oracle PL/SQL]

PL/SQL函数和过程的创建和调用的基础语法

在 PL/SQL 中捕获 SQL/开发人员脚本输出