我试图使用动态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 |一|
| 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是必要的。请帮
1条答案
按热度按时间cyvaqqii1#
从这个post得到了答案
我在使用xmlagg语法时遇到了麻烦。通过上面的链接解决。