【发布时间】:2015-10-21 15:02:54
【问题描述】:
我在尝试使用 api 将 clob 转换为 varchar2 时遇到此错误。
我试图检索的“body”字段是 clob,但是我想将其转换为 varchar2(1000)。
请告知发生此错误的原因:
MERGE INTO XXX D
USING (
select
v_ticket_id ticket_id,
json_ext.get_number(json(value(S)),'id') comment_id,
json_ext.get_number(json(value(S)),'author_id') author_id ,
DBMS_LOB.SUBSTR(json_ext.get_string(json(value(S)),'body'),1000,1) body,
json_ext.get_string(json(value(S)),'via.channel')channel,
case when lower(json(value(S)).get('public').to_char()) = 'true' then 1 else 0 end is_public,
to_date(replace(replace(json_ext.get_string(json(value(S)),'created_at'),'T',' '),'Z',null), 'YYYY-MM-DD HH24:MI:SS') created_at,
sysdate
FROM table(PKG.sf_retreive_data('RETREIVE').list_data) S) S
ON (D.ticket_id = S.ticket_id and D.comment_id = S.comment_id)
WHEN MATCHED THEN
UPDATE SET author_id = S.author_id,
body = S.body,
channel = S.channel,
is_public = S.is_public,
created_at = S.created_at,
bi_updated_time = sysdate
WHEN NOT MATCHED THEN
insert (ticket_id,comment_id,author_id ,body,channel,is_public,created_at,bi_updated_time)
values
(S.ticket_id,S.comment_id,S.author_id,S.body,S.channel,S.is_public,S.created_at,sysdate);
commit;
我得到这个错误: 错误:ORA-06502:PL/SQL:数字或值错误:字符串缓冲区太小
【问题讨论】:
-
什么是完整的异常堆栈?其他 get_string 结果有多大 - 您是否已将范围缩小到评论?
-
顺便说一句,与错误无关,但您不需要您的
replace电话;您可以在格式掩码中嵌入文字:to_date(json_ext.get_string(json(value(S)),'created_at'), 'YYYY-MM-DD"T"HH24:MI:SS"Z"'). -
如果您单独运行
USING子句中的SELECT(即不作为上述MERGE语句的一部分),它是否会成功执行?另外,请编辑您的问题并包括XXX表的定义。谢谢。