Oracle APEX中如何将逗号分隔值转为逐行显示?
解决Oracle APEX中逗号分隔值逐行显示的问题
针对查询返回逗号分隔邮箱地址、需要在APEX项里逐行显示的需求,给你两种实用方案:
方案一:在SQL查询中直接处理成换行格式
方法1:正则替换快速转换
直接修改查询语句,把逗号替换成Oracle换行符CHR(10)(如果需要网页端可视换行,也可以用<br>标签,取决于APEX项的显示设置):
SELECT REGEXP_REPLACE(AD.EMAIL_ADDRESS, ',', CHR(10)) recipient FROM HES_EXTERNAL_ACCOUNTS EA, HES_ADDRESSES AD WHERE EA.ACCOUNT_CODE = 'AUTO';
若你的APEX项开启了HTML显示支持,可改用<br>替换:
SELECT REGEXP_REPLACE(AD.EMAIL_ADDRESS, ',', '<br>') recipient FROM HES_EXTERNAL_ACCOUNTS EA, HES_ADDRESSES AD WHERE EA.ACCOUNT_CODE = 'AUTO';
方法2:拆分后合并(适合需独立行处理的场景)
如果需要先将每个邮箱拆分为单独行,再合并成带换行的字符串,可使用递归查询拆分:
SELECT LISTAGG(TRIM(REGEXP_SUBSTR(AD.EMAIL_ADDRESS, '[^,]+', 1, LEVEL)), CHR(10)) WITHIN GROUP (ORDER BY LEVEL) recipient FROM HES_EXTERNAL_ACCOUNTS EA, HES_ADDRESSES AD WHERE EA.ACCOUNT_CODE = 'AUTO' CONNECT BY LEVEL <= REGEXP_COUNT(AD.EMAIL_ADDRESS, ',') + 1 AND PRIOR SYS_GUID() IS NOT NULL AND PRIOR AD.EMAIL_ADDRESS = AD.EMAIL_ADDRESS;
该方法先拆分每个邮箱地址为独立行,再用LISTAGG拼接成带换行的结果,确保每个值单独占一行。
方案二:APEX前端用JavaScript处理
若不想修改SQL,可在页面加载完成后用JS替换逗号为换行(或<br>):
假设你的APEX项静态ID为P1_RECIPIENT,在页面的「Execute when Page Loads」中添加以下代码:
- 针对纯显示项:
var val = document.getElementById('P1_RECIPIENT').textContent; document.getElementById('P1_RECIPIENT').innerHTML = val.replace(/,/g, '<br>');
- 针对文本域输入项:
var val = document.getElementById('P1_RECIPIENT').value; document.getElementById('P1_RECIPIENT').value = val.replace(/,/g, '\n');
内容的提问来源于stack exchange,提问作者Abinnaya
相关产品推荐
相关产品推荐

