使用Oracle SQL developer将非重复列值透视到列中导致错误ORA-01489

1wnzp6jl  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(102)

我试图使用动态SQL在Oracle SQL Developer中将不同的列值透视到列中,有超过400个,每个单词平均包含50个字符的不同列值,我使用clob作为数据类型来存储连接的值,但我最终得到了这个错误:
ORA-01489字符串连接的结果太长
我尝试了listaggxmlagg,并将结果存储到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 |一|
| 1 |一|
| 1 |B|
| 1 |B|
| 1 |B|
| 1 |C|
| 1 |C|
| 2 |B|
| 2 |B|
| 3 |一|
这是预期的结果:
| ID|一|B| C|
| --|--|--|--|
| 1 | 2 | 3 | 2 |
| 2 | 0 | 2 | 0 |
| 3 | 1 | 0 | 0 |
请记住,categories列每个值平均有50个字符,超过400个值(可以增加或减少)。因此,动态SQL是必要的。请帮

cyvaqqii

cyvaqqii1#

从这个post得到了答案
我在使用xmlagg语法时遇到了麻烦。通过上面的链接解决。

相关问题