我正在尝试创建一个像这样的网格
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
对齐不均匀。
答案 0 :(得分:2)
这应该作为一个简单的查询而不是通过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.
您需要为数据适当设置填充值。而且,如果您向任一填充量加上一个,则不需要将显式' '
连接到字符串中。
您在评论中说,这将作为电子邮件的一部分发送;但是,即使您包括正确的填充以使其看起来像对齐的一样,您仍然依赖于邮件客户端以等宽字体呈现它。如果客户端使用比例字体,则它将再次看起来不正确(如this example from Gmail)。最好将其作为HTML表发送,并在电子邮件上带有适当的MIME类型标题。 (或者,也可以作为纯文本附件-如果可以确定收件人将在等宽字体编辑器中将其打开...)