问题描述
嗨,
我要在这里解释的问题有点奇怪和奇怪。
直接讨论这个问题; 有一个包含10个程序的软件包。其中一个叫休息9程序一个接一个。
在9过程之一中,它抛出异常为:
对象: 表 _ 1
并且其中出现错误的查询是:
但是,当我在plsql developer中分别执行相同的过程时,它运行绝对正常,没有任何错误。
我无法弄清楚同一过程的行为和行为方式不同; 一个是通过autosys作业执行 (或直接从服务器执行),另一个是通过plsql开发人员工具执行。
这是我第一次面临这样奇怪的问题。任何指导/帮助将不胜感激。
我可以轻松地处理该错误,但首先需要弄清楚为什么通过plsql developer执行相同的过程不会给出任何错误。
如果这对任何人来说听起来都很愚蠢,请原谅我,但请相信我,这是我一周以来观察到的情况。
提前谢谢。:)
我要在这里解释的问题有点奇怪和奇怪。
直接讨论这个问题; 有一个包含10个程序的软件包。其中一个叫休息9程序一个接一个。
在9过程之一中,它抛出异常为:
ERROR: ORA-01489: result of string concatenation is too long Failed
对象: 表 _ 1
并且其中出现错误的查询是:
SELECT COLUMN1 ,
LISTAGG(COLUMN2, '<>') WITHIN GROUP( ORDER BY ID) TITLE
FROM TABLE2 B
WHERE B.COLUMN1 NOT IN ('111222','333444')
AND TRIM(COLUMN1) IS NOT NULL
GROUP BY COLUMN1但是,当我在plsql developer中分别执行相同的过程时,它运行绝对正常,没有任何错误。
我无法弄清楚同一过程的行为和行为方式不同; 一个是通过autosys作业执行 (或直接从服务器执行),另一个是通过plsql开发人员工具执行。
这是我第一次面临这样奇怪的问题。任何指导/帮助将不胜感激。
我可以轻松地处理该错误,但首先需要弄清楚为什么通过plsql developer执行相同的过程不会给出任何错误。
如果这对任何人来说听起来都很愚蠢,请原谅我,但请相信我,这是我一周以来观察到的情况。
提前谢谢。:)
专家解答
当listagg返回长度超过varchar2限制 (4,000或32,767字节,取决于您的max_string_size设置) 的字符串时,您会收到ORA-01489错误。
最可能的原因是过程中的调用是事务的一部分,因此您可以看到不同的数据。
您确定运行查询时表中的值与出错时相同吗?
您可以使用overflow子句避免错误:
但这会导致数据丢失。还有其他解决方法-请参阅:
https://blogs.oracle.com/datawarehousing/managing-overflows-in-listagg
最可能的原因是过程中的调用是事务的一部分,因此您可以看到不同的数据。
您确定运行查询时表中的值与出错时相同吗?
您可以使用overflow子句避免错误:
listagg ( ... on overflow truncate )
但这会导致数据丢失。还有其他解决方法-请参阅:
https://blogs.oracle.com/datawarehousing/managing-overflows-in-listagg
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




