PLSQL CLOB最大长度错误
PLSQL CLOB maximum length error
我的code/PLSQL函数如下:
function build_update(p_table_name varchar2) --function to build update statement
return varchar2
as
t_string CLOB;
begin
for i in (select column_name from ALL_TAB_COLS where table_name = p_table_name)
loop
t_string := t_string || i.column_name||'='||' b' ||'.'||i.column_name||',';
end loop;
t_string := to_clob(to_char(substr(t_string, 1, instr(t_string, ',', -1)-1)));
return t_string;
end;
在创建要在合并中使用的动态 sql 更新时,显示错误,因为只能绑定一个 LONG 值以插入到 LONG 列中。
即使使用 CLOB,也不能占用更多字符。
我的 table 中只有 152 列,我正在为它们制作 column_nameA=B.column_nameA.
请帮忙
由于 varchar2
(在我的系统上大小 > 32512
)结果可能太大而无法处理,您应该将 return 值键入 CLOB
以避免错误。但是你必须在你的代码中处理 CLOB
,这很有趣。
declare
function build_update(p_table_name varchar2) --function to build update statement
return clob as
t_string CLOB;
begin
for i in (select column_name from ALL_TAB_COLS where table_name = p_table_name)
loop
t_string := t_string || i.column_name||'='||' b' ||'.'||i.column_name||',';
end loop;
t_string := substr(t_string, 1, instr(t_string, ',', -1)-1);
return t_string;
exception
when others then
dbms_output.put_line(sqlerrm);
dbms_output.put_line(length(t_string));
return 'kaput';
end;
begin
dbms_output.put_line(substr(build_update('MY_TABLE'), 1, 32512));
exception
when others then
dbms_output.put_line('-in-main:'||sqlerrm);
end;
/
我的code/PLSQL函数如下:
function build_update(p_table_name varchar2) --function to build update statement
return varchar2
as
t_string CLOB;
begin
for i in (select column_name from ALL_TAB_COLS where table_name = p_table_name)
loop
t_string := t_string || i.column_name||'='||' b' ||'.'||i.column_name||',';
end loop;
t_string := to_clob(to_char(substr(t_string, 1, instr(t_string, ',', -1)-1)));
return t_string;
end;
在创建要在合并中使用的动态 sql 更新时,显示错误,因为只能绑定一个 LONG 值以插入到 LONG 列中。
即使使用 CLOB,也不能占用更多字符。 我的 table 中只有 152 列,我正在为它们制作 column_nameA=B.column_nameA.
请帮忙
由于 varchar2
(在我的系统上大小 > 32512
)结果可能太大而无法处理,您应该将 return 值键入 CLOB
以避免错误。但是你必须在你的代码中处理 CLOB
,这很有趣。
declare
function build_update(p_table_name varchar2) --function to build update statement
return clob as
t_string CLOB;
begin
for i in (select column_name from ALL_TAB_COLS where table_name = p_table_name)
loop
t_string := t_string || i.column_name||'='||' b' ||'.'||i.column_name||',';
end loop;
t_string := substr(t_string, 1, instr(t_string, ',', -1)-1);
return t_string;
exception
when others then
dbms_output.put_line(sqlerrm);
dbms_output.put_line(length(t_string));
return 'kaput';
end;
begin
dbms_output.put_line(substr(build_update('MY_TABLE'), 1, 32512));
exception
when others then
dbms_output.put_line('-in-main:'||sqlerrm);
end;
/