Oracle PL/SQL中如何在每行末尾添加双引号与逗号
解决PL/SQL多行字符串每行加双引号及末尾逗号的问题
问题分析
你当前的代码仅完成了给每行包裹双引号的操作,但没在引号后添加逗号;而你尝试的拼接逻辑错误地将整个已处理的字符串再拼接逗号,自然达不到预期效果。需要调整循环内的字符串拼接逻辑,并处理最后一行的多余逗号。
解决方案
修改循环内的拼接语句,直接在每行的双引号后添加逗号,最后再移除末尾的多余逗号(如果不需要最后一行带逗号)。同时优化正则表达式以兼容不同换行符格式:
DECLARE v_fulltext varchar2(4000) := ' Total Total Total Unbalanced Unbalanced Flex Nonflex Journal Entry Source Name Group ID Status Lines Batches Headers Batches Headers Errors Errors ---------------------------- ------------------ ------- ------- ------- ------- ---------- ---------- ---------- ---------- Manual 90005 Error 10 1 1 3 1 0 0 ---------------------------- ------------------ ------- ------- ------- ------- ---------- ---------- ---------- ---------- *** TOTALS *** 1 1 1 1 1 0 0'; v_full_text_quote varchar2(4000); BEGIN FOR sumaryline IN ( SELECT regexp_substr(v_fulltext, '.*?('||CHR(10)||'|$)', 1, level) sumaryline FROM dual CONNECT BY level <= regexp_count(v_fulltext, CHR(10)) + 1 ) LOOP -- 拼接双引号、内容、双引号、逗号和换行,trim去除每行前后冗余空白 v_full_text_quote := v_full_text_quote || '"' || trim(sumaryline.sumaryline) || '",' || CHR(10); END LOOP; -- 移除最后一行末尾的多余逗号(如果不需要最后一行带逗号) IF v_full_text_quote IS NOT NULL THEN v_full_text_quote := rtrim(v_full_text_quote, ','||CHR(10)) || CHR(10); END IF; dbms_output.put_line(v_full_text_quote); END; /
关键改动说明
- 正则表达式优化:改用
regexp_count计算总行数,配合regexp_substr更准确拆分每行,兼容Windows(\r\n)和Unix(\n)换行符。 - 拼接逻辑调整:直接在每行处理时添加
",,确保每行双引号后带逗号,一步到位。 - 去除多余逗号:循环结束后用
rtrim移除最后一行末尾的逗号,避免最终结果多一个无效逗号。 - 双引号简化:PL/SQL中直接用
"即可,无需HTML转义的",代码更简洁直观。
效果示例
处理后输出的每行格式如下:
" Total Total Total Unbalanced Unbalanced Flex Nonflex", "Journal Entry Source Name Group ID Status Lines Batches Headers Batches Headers Errors Errors", "---------------------------- ------------------ ------- ------- ------- ------- ---------- ---------- ---------- ----------", "Manual 90005 Error 10 1 1 3 1 0 0", "---------------------------- ------------------ ------- ------- ------- ------- ---------- ---------- ---------- ----------", " *** TOTALS *** 1 1 1 1 1 0 0"
内容的提问来源于stack exchange,提问作者Cesar Tepetla
相关产品推荐
相关产品推荐

