Oracle 连接大列表

Posted

技术标签:

【中文标题】Oracle 连接大列表【英文标题】:Oracle concatenate large list 【发布时间】:2014-03-03 19:22:14 【问题描述】:

我有一个包含 15 个值的列表,我想将它们连接到一个逗号分隔的列表中。其中一些值为空(可以跳过),我希望列表不要以逗号结尾。我想制作这个列表,这样如果 SQL 之间有空值,就不会产生一个看起来像这样的值列表: , , ,

例如:

select val1 || ', ' || val2 || ', ' val3

等等……

应显示:val1、val2、val3 等

在 Oracle 中是否有一种简洁的方法可以在没有大的 case 语句的情况下做到这一点?

【问题讨论】:

不同列的值是在一行,还是同一列在多行?如果是后者 - 如果您使用的是 11g,请查看 listagg,或者在早期版本中有常见的字符串聚合方法。 这些值来自一行中的不同列 - 不幸的是 listagg 在这里不起作用 那么不,除非您旋转列,这看起来有点过分,否则您将不得不手动构建连接。不过,它似乎并不特别复杂 - 只是更多的输入...... @AAA 请参阅此answer 的后面部分。不确定这是不是好方法,但它仍然是一种。 【参考方案1】:

您可以使用 NVL 将结果中的 null 替换为字符串

select NVL(val1, 'NA')....

【讨论】:

以上是关于Oracle 连接大列表的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 11g 监听很慢,由于监听日志文件太大引起的问题(Windows 下)

不安装oracle客户端,用plsql连接oracle

SWAP_JOIN_INPUTS Oracle Hint(处理hash join强制大表(segment_size大)作为被驱动表)

JDBC连接Oracle

oracle 10g 客户端连接数据库 出现ora-12154 错误

oracle 远程连接