Dat*_*ase 15 sql oracle varchar clob
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;
Run Code Online (Sandbox Code Playgroud)
只要我们知道在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;
Run Code Online (Sandbox Code Playgroud)
现在,如果我运行它:
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;
Run Code Online (Sandbox Code Playgroud)
我明白了
ORA-22814:属性或元素值大于类型中指定的值
它有什么解决方案吗?
谢谢
使用xmlAgg,示例如下:
SELECT RTRIM(XMLAGG(XMLELEMENT(E,colname,',').EXTRACT('//text()') ORDER BY colname).GetClobVal(),',') AS LIST
FROM tablename;
Run Code Online (Sandbox Code Playgroud)
这将返回 clob 值,因此无需创建自定义函数。
| 归档时间: |
|
| 查看次数: |
43311 次 |
| 最近记录: |