我试图在Oracle SQL Developer中使用动态SQL将不同的列值转换为列,有400多个不同的列值,每个单词平均包含50个字符的不同的列值,我使用LOB作为数据类型来存储连接的值,但最终收到了以下错误:
ORA-01489字符串连接结果太长
我try 了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 | categories |
---|---|
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是必要的.请帮帮忙