首页 > 解决方案 > 在 PL/SQL 中创建文本网格

问题描述

我正在尝试创建这样的网格

produce | price
________________
Apple   | $1.3
________________
Orange  | $ 2.6

垂直边框是可选的。

现在这就是我所拥有的

stringBuilder := '';
for i in (select * from produces) loop
    stringBuilder := stringBuilder || ' ' || i.name || ' ' || i.price || chr(10);
end loop;

但上述查询不会生成正确的格式。它创造的是:

Apple $1.3 

Orange $1.6

对齐不均匀。

标签: oracleplsql

解决方案


这应该作为一个简单的查询来完成,而不是通过 PL/SQL,但大概这是你在 PL/SQL 中专门做的一个练习......

您需要填充表格中的值,使它们的长度相同。你也不想要你当前正在连接的额外空间。

快速示例:

set serveroutput on

declare
  stringBuilder varchar2(4000);
begin
  stringBuilder := ''; -- default is null anyway
  for i in (select * from produces) loop
    stringBuilder := stringBuilder || rpad(i.name, 10)
      || ' ' || lpad(i.price, 5) || chr(10);
  end loop;
  dbms_output.put_line(stringBuilder);
end;
/

Apple       $1.3
Orange      $2.6

PL/SQL procedure successfully completed.

您将需要为您的数据适当地设置填充值。如果您将一个添加到任一填充量,那么您不需要将显式' '连接到字符串中。


您在评论中说这将作为电子邮件的一部分发送;但即使您包含正确的填充以使其看起来像是对齐的,您也依赖于邮件客户端以等宽字体呈现它。如果客户端使用比例字体,那么它会再次出现错误(如Gmail 中的此示例)。最好将其作为 HTML 表格发送,并在电子邮件中使用适当的 MIME 类型标题。(或者,可能,作为纯文本附件 - 如果您可以确定收件人会在等宽字体编辑器中打开它......)


推荐阅读