1

我想知道如何将以下代码的输出显示在整齐的列中。现在的输出没有整齐地组织。有什么我需要放在变量前面的吗?

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'));
4

2 回答 2

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.
于 2013-04-19T00:03:12.627 回答
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
于 2013-04-19T12:54:49.767 回答