这是我的线索... 我用的是oracle 11g。搜索了很多,但没有找到。
我需要执行DML操作,它可以包含> 4k字符的数据。
如果我直接在oracle中使用sql block ,就像下一个一样,一切正常
declare
txtV varchar2(32000);
BEGIN
txtV:= 'MORE THAN 4k CHARS, here only few for readability' ;
Update FD_FILTERDEF
set SQLFILTER = txtV
where id='blabla';
END;
但是!!!
如果我使用合并语句,它会给我错误ORA-01461
declare
txtV varchar2(32000);
BEGIN
txtV:= '' ;
MERGE INTO FD_FILTERDEF A
USING ( select txtV C0
from dual) ST
ON (A.CODE = 'bla bla')
WHEN MATCHED THEN
Update set A.SQLFILTER = st.C0
WHEN NOT MATCHED THEN
insert (CODE ,SQLFILTER )
values ('bla bla' , ST.C0 );
END;
如果有一些提示,我们将不胜感激:)
最佳答案
使用这个:
create table fd_filterdef
( code varchar2(10) primary key
, sqlfilter clob );
declare
txtv varchar2(32000);
begin
txtv := rpad('select statement, really really long', 5000, ' etc');
merge into fd_filterdef a
using (select 'bla bla' as code from dual) st
on (a.code = st.code)
when matched then
update set a.sqlfilter = txtv
when not matched then
insert (code, sqlfilter)
values (st.code,txtv);
end;
/
select code, length(sqlfilter) from fd_filterdef;
CODE LENGTH(SQLFILTER)
---------- -----------------
bla bla 5000
从 Dual 中选择 long 变量会将其隐式转换为 SQL varchar2
,在 12c 之前,该变量最多只能容纳 4000 个字节。
关于oracle - ORA-01461 (with > 4k varchar2) 错误 仅在合并语句中。插入或更新工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38463857/