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”
有没有办法可以解决这个问题
答案 0 :(得分: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
)
答案 1 :(得分:2)
正如您所知,使用to_clob
有其局限性。说实话,我认为你使用的是一个很好的工具(一个RDBMS)作为一种钝的旧石器武器。
解决问题的最简单方法是在代码中进行串联 in-situ ,而不是使用SQL。 Oracle中的连接操作有一个最大长度限制(4k长度),并且您可以使用to_clob
的位置进行限制。
所以,如果你有这两个硬限制,那么最明智的做法是做我建议你的事情(在代码中进行连接),而不是试图颠覆或找到一种几乎神奇的方法来解决这个问题。
从表A中选择a,b,c,d 联盟 从表B中选择a,b,c,d
然后获取结果集(或您使用的任何特定于语言的构造)并连接应用程序代码中的字段。
答案 2 :(得分:0)
这种方式我用来查找程序
WITH mytable
(id, serv1, serv2, serv3, serv4, serv5, serv6)
AS (
VALUES
('001', 2,3,5,1,4,6),
('002', 2,1,5,3,4,6),
('003', 6,2,5,3,4,1)
)
SELECT id, tjs.key column_name
FROM mytable t, json_each_text(row_to_json(t)) tjs
WHERE tjs.value = '1'
有趣的是,表all_source具有按行划分的每个过程的信息,这些过程处理起来很棘手。首先,我连接每个过程的行,然后设置选项ON OVERFLOW TRUNCATE以避免字符串溢出;当然它对我有用,因为我只需要程序声明。 在这种情况下,我正在寻找名称中包含的程序" P _"并具有OUT类型的属性。 这同样可以应用于仅改变类型的搜索功能='程序'按类型='功能' 希望这有帮助。