SteelProgramming | +38 098 888 58 89 Alexanders.berezovich Skypesteelprogram@gmail.com E-mail |
ORA-01461 one way to fixToday I catch ORA-01461. For reproducing, please, use following code create table table1 ( field1 varchar2(4000 byte) ); declare -- max size for -- varchar2 in PL/SQL l_txt1 varchar2(32767) := lpad('*', 32767, '*'); -- max size for -- varchar2 in SQL l_txt2 varchar2(4000) := substr(l_txt1, 1, 4000); begin -- this line rize ORA-01461 -- fire because variable length more than -- field length field1 (described bottom) insert into table1(field1) values(substr(l_txt1, 1, 4000)); -- but when we use local variable with -- right length (4000 as length field1) all good insert into table1(field1) values(substr(l_txt1, 1, 4000)); end; / drop table table1; When I catch error, first of all I look at table structure, but not found any LONG field. Only few varchar2(4000 byte) fields. Suspecting problem with field size limit excess I try change substr on substrb but withput result, after that I used local variable and problem disappeared. But what is root of problem? Google few minutes I found description on Oracle Forum. As I understand: when Oracle bind variable, it's not calculate result of function substr before calculating length of variable, as result Oracle "think" that variable length is 32767 and this length more than max size for SQL (4000 characters) so Oracle decide using LONG type, which leads to error . When local variable used bind passes rightly and used variable with right data type varchar2 instead of long. Hope it's help for somebody You can add comment on current page, or on forum page there.Post count 10. Last comment10.01.2021 buy drugs online
viagra 08.01.2021 generic sildenafil
偉哥價格 08.01.2021 generic sildenafil
Buy Viagra or generic sildenafil | |
powered by Steel Programming |