大佬教程收集整理的这篇文章主要介绍了Oracle 字符串连接太长,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试执行以下查询,该查询通过将值传递到变量中来对表进行透视。它适用于其他查询。
DECLARE
cols VARCHAR2(30000);
BEGIN
SELECT
ListAGG(''''
|| agr_name
|| ''' as "'
|| agr_name
|| '"',',') WITHIN GROUP(
ORDER BY
agr_name
)
INTO cols
FROM
(
SELECT disTinCT
to_char(agr_Name) AS agr_name
FROM
dat_skills
-- WHERE
-- ROWNUM < 400
);
EXECUTE IMMEDIATE q'[
CREATE OR replaCE VIEW vw_dat_skills AS
SELECT
*
FROM
dat_skills PIVOT (
COUNT ( agr_name )
FOR agr_name
IN (]'||cols||q'[)
)
]'
;
END;
但我收到以下错误:
ORA-01489: result of String concatenation is too long
01489. 00000 - "result of String concatenation is too long"
*Cause: String concatenation result is more than the maximum size.
*Action: Make sure that the result is less than the maximum size.
如果我执行 SELEct disTinct 它会检索 138 行,总长度为 2777 个字符。
WITH aux AS (
SELECT disTinCT
to_char(agr_Name) AS agr_name
FROM
dat_skills
)
SELECT
count(1),sum(length(agr_Name))
FROM
aux
是否有任何解决方法可以绕过此限制?还是我做错了什么?
您没有做错任何事情(可能除了计算,因为您必须添加单引号和“as
”,它会添加到每个值查询返回),但是 LISTAGG
具有较高的限制设置为 4000 个字符。
怎么办?切换到@R_29_6353@
。如何?像这样:
SQL> SELECT LISTAGG (dname,',') WITHIN GROUP (ORDER BY dName) AS r_listagg,2 --
3 RTRIM (
4 @R_29_6353@ (XMLELEMENT (e,dname || ',') ORDER BY dName).EXTRACT (
5 '//text()'),6 ',') r_xmalagg
7 FROM dept
8 /
R_LISTAGG
--------------------------------------------------------------------------------
R_XMALAGG
--------------------------------------------------------------------------------
ACCOUNTinG,OPERATIONS,RESEARCH,SALES
ACCOUNTinG,SALES
SQL>
重写它,使其适用于您的表和列。
以上是大佬教程为你收集整理的Oracle 字符串连接太长全部内容,希望文章能够帮你解决Oracle 字符串连接太长所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。