【发布时间】: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,那么您可以使用分隔符(例如制表符或管道)而不是对齐列中的文本。如果必须对齐,那么
lpad和rpad应该可以完成这项工作。您可以将文本分配给char变量来代替右填充,因为它涉及到同样的事情(同样注意空值)。
标签: oracle stored-procedures plsql dbms-output