gpt4 book ai didi

oracle - 使用 Oracle 过程连接多个 clobs

转载 作者:行者123 更新时间:2023-12-04 04:52:54 26 4
gpt4 key购买 nike

我有一个 Oracle 过程,它将接受一个参数中的多个值。该过程的一部分将运行一个 select 语句,将参数的结果放入 where 子句中,并将串联的 CLOB 放入一个变量中。我目前正在程序中使用下面的查询,但是当我运行它时,出现以下错误。

If CLOB_ID is not null then
SELECT cast((collect(CLOB_TEXT) )as CLOB )
into v_MessageBody
FROM MESSAGE_CLOB_TABLE
WHERE MESSAGE_ID in CLOB_ID;
End If;

错误:ORA-00932:不一致的数据类型:预期 - 得到 CLOB

我还尝试使用 LISTAGG 函数编写此代码,但 LISTAGG 不适用于 MESSAGE_CLOB_TABLE 中的 CLOB 值

任何帮助将不胜感激!我正在使用 Oracle 11g。

最佳答案

如果您需要在 PL/SQL 中连接,最简单的变体是遍历所有选定的记录并将所有找到的记录附加到结果中:

create or replace function get_message(p_msg_id in number) return CLOB
is
v_MessageBody CLOB;
begin
-- create new instance of temporary CLOB
dbms_lob.createtemporary(v_MessageBody, true);

-- Fill instance with lines
for cMessages in (
select clob_text
from message_clob_table
where message_id = p_msg_id
order by message_row
)
loop
-- add line
dbms_lob.append(v_MessageBody, cMessages.clob_text);
end loop;

-- return collected lines as single CLOB
return v_MessageBody;
end;

如果类型为 CLOB_TEXT,则上述示例有效字段是 CLOB并且您只需要收集一条消息。您可以在 this SQLFiddle 中测试功能.

如果需要根据他的ID列表选择多条消息,功能会稍微复杂一些,但原理是一样的。

关于oracle - 使用 Oracle 过程连接多个 clobs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17157207/

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