使用 Oracle SQL Developer 将不同的列值转换为列会导致错误 ORA-01489

问题描述 投票:0回答:1

我正在尝试使用动态 SQL 将不同的列值转换为 Oracle SQL Developer 中的列,有超过 400 个且每个单词平均包含 50 个字符的不同列值,我使用 clob 作为数据类型来存储连接值,但我最终出现此错误:

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

我尝试了

listagg
xmlagg
并将结果存储到
clob
变量中,但问题仍然存在。

这是示例代码:

declare
    v_clob_data clob;
    dynamic_sql clob;

begin
    v_clob_data := empty_clob();

    select 
        listagg(''''||category_name||''''||' as "'||category_name||'"',',') within group (order by category_name)
into v_clob_data
from (select distinct categories as category_name from my_table);

    dynamic_sql :='
        select * from 
        (
            select 
                id,
                categories
            from my_table        
        )
        pivot(
            count(categories) for categories in ('||v_clob_data||')
        )';

    execute immediate dynamic_sql;
end;

my_table
看起来像这样:

id 类别
1 A
1 A
1 B
1 B
1 B
1 C
1 C
2 B
2 B
3 A

这是预期的结果:

id A B C
1 2 3 2
2 0 2 0
3 1 0 0

请记住,

categories
列的每个值平均有 50 个字符,并且有超过 400 个值(可以增加或减少)。因此动态SQL是必要的。请帮忙

sql oracle pivot-table
1个回答
0
投票

从这个帖子

得到了答案

我在使用 xmlagg 语法时遇到了问题。参考上面的链接解决了。

© www.soinside.com 2019 - 2024. All rights reserved.