2017-05-29 89 views
0

我已经写了一个存储过程来显示关于员工工资的屏幕细节,它工作的很好,但我想修复显示在屏幕上的信息。我尝试使用LPAD和RPAD函数来在屏幕上排列“列”,但它不起作用,或者我可能没有很好地使用它。你有什么主意吗?谢谢。显示Oracle PL/SQL - 如何格式化屏幕上显示的数据?

  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; 

最新信息:

enter image description here

当我出口的信息复制到记事本,我想看到类似的东西:

enter image description here

+1

看起来不错除了几个多余的空格'Cantidad'之前和'Retenciones'列中的数字。请记住,空值不会被填充,空格是默认的填充字符,所以你不需要''''。 (顺便说一句,是记事本或Excel?) –

+0

对不起,这是为Excel,但还没有工作。有没有任何功能或什么来格式化输出?或者我应该继续尝试使用LPAD和RPAD功能? –

+1

如果仅用于Excel,则可以使用分隔符(例如制表符或管道),而不是将列中的文本对齐。如果它必须对齐,那么'lpad'和'rpad'应该可以完成这项工作。您可能会将文本分配给char变量而不是正确填充,因为它涉及到相同的事情(对空值的注意事项相同)。 –

回答

1

你可以用LPAD做到这一点和RPAD。只需要一点点算术。

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

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;