我试图在Oracle SQL Developer中使用动态SQL将不同的列值转换为列,有400多个不同的列值,每个单词平均包含50个字符的不同的列值,我使用LOB作为数据类型来存储连接的值,但最终收到了以下错误:

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

我try 了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 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是必要的.请帮帮忙

推荐答案

从这post个人那里得到了答案

我在xmlagg语法方面遇到了问题.通过引用上面的链接解决了该问题.

Sql相关问答推荐

SQL计数所有值在联接范围内的行

Trino/Presto sq:仅当空值位于组中第一个非空值之后时,才用值替换空值

SQL基于多个值 Select 单行

如何优化我的功能以减少花费的时间?

如何在不更改S代码的情况下,判断存储过程调用了多少次clr函数?

部分匹配表中元素的MariaDB查询查找结果

如何嵌套两条SQL语句

SQL按日期分组字段和如果日期匹配则求和

带日期函数的复合索引不允许只扫描索引吗?

将两列相加为同一表中的行的查询

使用同一个表,为什么IN、NOT IN、NOT EXISTS和EXISTS有不同的输出?

在Oracle SQL中按月生成日期

每个分组最多 Select 最后 2 个值并并排显示它们

汇总具有连续日期范围的行

如何在 postgres 中旋转某些数据字段

在自引用表中使用分组和计数的SQL查询语句

标量子查询中的窗口函数不起作用

IN子句使用的表值用户定义函数参数

以 15 分钟为间隔的使用情况SQL 查询

在 MySql 数据库中的两个日期之间搜索