oracle - 在 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
对齐不均匀。
解决方案
这应该作为一个简单的查询来完成,而不是通过 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 类型标题。(或者,可能,作为纯文本附件 - 如果您可以确定收件人会在等宽字体编辑器中打开它......)
推荐阅读
- c - 比较字符串的第一个和第三个字符
- parallel-processing - OpenMP 线程的 OpenBlas 并行化
- mysql - 如何将 auto_increment 字段添加到包含大量数据的表中?
- angular - 将 Neovis.js 与 Neo4j 一起使用时出现此错误。- neovis_js_dist_neovis_js__WEBPACK_IMPORTED_MODULE_4___default.a.default 不是构造函数
- javascript - 嵌套的 Redux 持久化器
- c# - 在 Jquery Img 标记中未从 DB 填充图像,因为 Src 在源中附加了我无法删除的视图路径位置?MVC
- ftp - 我更换了一个FTP服务器,现在我无法在vb6 ftp api函数中上传文件
- javascript - 脚本编辑器中的 JS、JQuery 和 Sharepoint
- jooq - javax/xml/bind/ValidationEventHandler 错误
- html - 将 li 元素显示在一个下一个