gpt4 book ai didi

sql - Oracle 中 listagg 的替代方案?

转载 作者:行者123 更新时间:2023-12-03 20:05:37 25 4
gpt4 key购买 nike

listagg 是 Oracle 11.2 中引入的函数!现在这个函数正在困扰我们,我们正在从 MySQL 迁移到 Oracle,我们有这个查询:

SELECT
p_id,
MAX(registered) AS registered,
listagg(MESSAGE, ' ') within GROUP (ORDER BY registered) AS MESSAGE
FROM
umm_parent_id_remarks_v m
GROUP BY
m.p_id;

据我们所知,在 MySQL 中运行良好
在 Oracle 下困扰我们的是它返回 VARCAR 而不是我们需要的 CLOB!
文本很大,我们确实需要它是 CLOB !

这就是我试图做的!

创建一个 CLOB 类型的 CLOB_T 表!

然后创建函数
create or replace
function listaggclob (t in clob_t)
return clob
as
ret clob := '';
i number;
begin
i := t.first;
while i is not null loop
if ret is not null then
ret := ret || ' ';
end if;
ret := ret || t(i);
i := t.next(i);
end loop;
return ret;
end;

现在,如果我运行它:
  SELECT
p_id,
MAX(registered) AS registered,
listaggclob(cast(collect (MESSAGE) as clob_t)) MESSAGE
FROM
umm_parent_id_remarks_v m
GROUP BY
m.p_id;

我得到

ORA-22814: 属性或元素值大于类型 中指定的值

有什么解决办法吗?

感谢您

最佳答案

关于sql - Oracle 中 listagg 的替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9412512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com