2011-04-26 138 views
3

ORA-01489:字符串连接的结果是太长ORA-01489:字符串连接的结果是太长

SQL查询下面是指从数据库中提取数据作为管道分隔和卷轴到一个文本在UNIX文件

select a||'|'||b||'|'||c||'|'||d from table 
union 
select a||'|'||b||'|'||c||'|'||d from table 

它有时给人的ORA错误ORA-01489:字符串连接的结果是太长

这就像如果选择超过4000极限

存在的

我尝试使用TO_CLOB但这仅适用于“UNION ALL”

有没有一种办法可以解决这个问题

+1

可能重复[oracle-字符串连接的结果太长](http://stackoverflow.com/questions/29776035/oracle-result-of-string-concatenation-is-too-long) – 2015-12-02 06:45:06

回答

6

在连接前做工会。

select to_clob(a) ||'|'|| to_clob(b) ||'|'|| to_clob(c) ||'|'|| to_clob(d) from 
    (
    select a, b, c, d from table1 
    union 
    select a, b, c, d from table2 
) 
2

正如你发现的,使用to_clob有其局限性。说实话,我认为你正在使用一种很好的工具(RDBMS)作为一种钝器旧石器时代的武器。

解决该问题的最简单方法是在代码中进行原位的连接,而不是使用SQL进行连接。在Oracle中连接操作有最大长度限制(长度为4k),并且在可以使用的地方有一个限制to_clob。所以如果你有这两个严格的限制,最明智的做法是做我建议你(做代码中的连接),而不是试图颠覆或找到一种几乎不可思议的方式来解决这个问题。

选择A,B,C,从表d甲 工会 选择A,B,C,d从表B中

然后取所得的结果集(或任何特定语言的使用构建体)并连接应用程序代码中的字段。