【问题标题】:Oracle PL/SQL - how can I format the data displayed on screen?Oracle PL/SQL - 如何格式化屏幕上显示的数据?
【发布时间】:2017-10-29 22:09:24
【问题描述】:

我编写了一个存储过程来在屏幕上显示有关员工工资的详细信息,并且效果很好,但我想修复屏幕上显示的信息。我尝试使用 LPAD 和 RPAD 功能在屏幕上订购“列”,但它不起作用,或者我可能没有很好地使用它。你有什么主意吗?谢谢。

            FOR j IN c_recibos (t_emp(i).numero, t_emp(i).legajo)
            LOOP
                DBMS_OUTPUT.PUT_LINE(
                    RPAD(j.concepto, 24, ' ') || ' ' || 
                    LPAD(j.cantidad, 10, ' ') || ' ' || 
                    RPAD(TO_CHAR(j.haberes, '0000.00'), 9, ' ') || ' ' || 
                    LPAD(TO_CHAR(j.retenciones, '0000.00'), 28, ' '));
            END LOOP;

            FOR k IN c_totales(t_emp(i).numero, t_emp(i).legajo)
            LOOP
                DBMS_OUTPUT.PUT_LINE(
                    'Totales: ' || k.total_haberes || ' ' || 
                    k.total_retenciones);
            END LOOP;

            DBMS_OUTPUT.PUT_LINE('------------');
        END LOOP;

当前显示的信息:

当我将信息导出到记事本时,我希望看到类似的内容:

【问题讨论】:

  • 除了“Cantidad”前面的几个额外空格和“Retenciones”列中的数字外,看起来还不错。请记住,不会填充空值,并且空格是默认填充字符,因此您不需要' '。 (顺便说一句,那是记事本还是 Excel?)
  • 对不起,它适用于 excel,但还不能工作。是否有任何功能或东西来格式化输出?还是我应该继续尝试使用 LPAD 和 RPAD 功能?
  • 如果它仅适用于 Excel,那么您可以使用分隔符(例如制表符或管道)而不是对齐列中的文本。如果必须对齐,那么 lpadrpad 应该可以完成这项工作。您可以将文本分配给 char 变量来代替右填充,因为它涉及到同样的事情(同样注意空值)。

标签: oracle stored-procedures plsql dbms-output


【解决方案1】:

您可以使用LPADRPAD 执行此操作。只需做一点数学运算。

1) 你应该给Cantidad添加2个空格

2) Totales 也应该被填充(首先是静态的,然后是数字):

 FOR j IN c_recibos (t_emp(i).numero, t_emp(i).legajo)
 LOOP
     DBMS_OUTPUT.PUT_LINE(
         RPAD(j.concepto,                        24, ' ') || ' ' || 
         LPAD(j.cantidad,                        12, ' ') || ' ' ||
         RPAD(TO_CHAR(j.haberes, '0000.00'),      9, ' ') || ' ' || 
         LPAD(TO_CHAR(j.retenciones, '0000.00'), 28, ' ')
     );
 END LOOP;

 FOR k IN c_totales(t_emp(i).numero, t_emp(i).legajo)
 LOOP
     DBMS_OUTPUT.PUT_LINE(
         RPAD('Totales:',                              24, ' ') || ' ' || 
         LPAD(':',                                     12, ' ') || ' ' || 
         RPAD(TO_CHAR(k.total_haberes, '0000.00'),      9, ' ') || ' ' || 
         LPAD(TO_CHAR(k.total_retenciones, '0000.00'), 28, ' ')
     );
 END LOOP;

【讨论】:

    猜你喜欢
    • 2013-03-24
    • 2014-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多