如何将PL / SQL中的输出格式化为直列?

时间:2013-04-18 23:56:21

标签: sql oracle plsql

我想知道如何将以下代码的输出显示在一个整齐的列中。现在的输出并不整齐。我需要在变量前面放一些东西吗?

DBMS_OUTPUT.PUT_LINE('Employee Name: ' || (v_name));
DBMS_OUTPUT.PUT_LINE('Job: ' || (v_job));
DBMS_OUTPUT.PUT_LINE('Total Pay: ' || TO_CHAR(v_pay, '$999G999G999D99'));

2 个答案:

答案 0 :(得分:4)

您输出的是一个字符串,因此没有机会让值整齐排列,因为它们可以在一个简单的选择中。连接(||)恰好将它所给出的内容完全结合在一起。

您需要做的就是手动填充字符串:

DBMS_OUTPUT.PUT_LINE('Employee Name: ' || (v_name));
DBMS_OUTPUT.PUT_LINE('Job:           ' || (v_job));
DBMS_OUTPUT.PUT_LINE('Total Pay:     ' || TRIM(TO_CHAR(v_pay, '$999G999G999D99')));

数字列的to_char使其左边填充(右对齐)到格式掩码的宽度:

SQL> select TO_CHAR(4.97,'$999G999G999D99') from dual;

TO_CHAR(4.97,'$9
----------------
           $4.97

...所以在这种情况下你需要一个trim左右,所以它只使用你自己的填充。

DECLARE
    v_name varchar2(30) := 'Joe Bloggs';
    v_job varchar2(20) := 'Contractor';
    v_pay number := 52657.3;
BEGIN
    DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_name);
    DBMS_OUTPUT.PUT_LINE('Job:           ' || v_job);
    DBMS_OUTPUT.PUT_LINE('Total Pay:     '
        || TRIM(TO_CHAR(v_pay, '$999G999G999D99')));
END;
/

Employee Name: Joe Bloggs
Job:           Contractor
Total Pay:     $52,657.30

PL/SQL procedure successfully completed.

答案 1 :(得分:2)

显示为列 - 这是一种简单的方法。你可以使用Rpad(),Lpad(),我想这会更高级:

DECLARE
   v_name varchar2(30) := 'Joe Bloggs';
   v_job varchar2(20) := 'Contractor';
   v_pay number := 52657.3;
BEGIN
  DBMS_OUTPUT.PUT_LINE('Employee Name'||chr(9)||chr(9)||chr(9)||'Job'||chr(9)||chr(9)||chr(9)||chr(9)||chr(9)||'Total Pay');
  DBMS_OUTPUT.PUT_LINE('--------------------------------------------------------');
  DBMS_OUTPUT.PUT_LINE(v_name||chr(9)||chr(9)||chr(9)||chr(9)||chr(9)||v_job||chr(9)||chr(9)||TRIM(TO_CHAR(v_pay, '$999G999G999D99')));
END;
/

Employee Name           Job                 Total Pay
--------------------------------------------------------
Joe Bloggs             Contractor           $52,657.30