Hello. I create Oracle-DB with JA16EUC CHARSET, and select with UTF8 CHARSET.
When converting from JA16EUC to UTF8, increases the number of bytes of a character sequence. It occurs ORA-24345 Error. This patch solve ORA-24345 Problem. -- Mikage Sawatari (Taku Sano) <[EMAIL PROTECTED]> $ patch < ../DBD-Oracle-1.12-nlsconv-buff.patch ---- DBD-Oracle-1.12-nlsconv-buff.patch ---- --- oci8.c Sat Sep 1 00:55:05 2001 +++ oci8.c2 Mon Sep 17 13:22:45 2001 @@ -884,7 +884,7 @@ /* the simple types */ case 1: /* VARCHAR2 */ case 96: /* CHAR */ - fbh->disize = fbh->dbsize; + fbh->disize = fbh->dbsize * 4; fbh->prec = fbh->disize; break; case 23: /* RAW */ ---- execute log before patch ---- [mikage@mana tmp]$ perl dbdtest.pl DBD::Oracle::st fetchrow_arrayref failed: ORA-24345: A Truncation or null fetch error occurred (DBD ERROR: ORA-01406 error on field 1 of 1, ora_type 1) at dbdtest.pl line 59. Issuing rollback() for database handle being DESTROY'd without explicit disconnect() during global destruction. ---- execute log after patch ---- [mikage@mana tmp]$ perl dbdtest.pl 15 ---- nlstest.pl ---- use DBI; use DBD::Oracle; BEGIN { $ENV{ORACLE_SID} = 'MANA'; $ENV{ORACLE_HOME} = '/home/oracle/OraHome'; $ENV{ORACLE_TERM} = 'vt100'; $ENV{PATH} = $ENV{PATH} . ':' . $ENV{ORACLE_HOME} . '/bin'; $ENV{LD_LIBRARY_PATH} = $ENV{LD_LIBRARY_PATH} . ':' . $ENV{ORACLE_HOME} . '/lib'; $ENV{ORA_NLS33} = $ENV{ORACLE_HOME} . '/ocommon/nls/admin/data'; $ENV{NLS_LANG} = 'AMERICAN_AMERICA.UTF8'; $ENV{NLS_DATE_FORMAT} = 'YYYY-MM-DD HH24:MI:SS'; } # SQL> create table test ( # 2 data VARCHAR2(10) NOT NULL # 3 ); # SQL> insert into test values ('てすとです'); # # insert Japanese Charactor # SQL> commit; $DB = DBI->connect('dbi:Oracle:',q{mikage/Pink0324},'', { AutoCommit => 0, PrintError => 0, RaiseError => 1 }) or die "Can't connect database.\n"; $DB->trace(10, 'trace.log'); my $sth = $DB->prepare(q{ SELECT * FROM test }); $sth->execute; while(my $data = $sth->fetchrow_arrayref) { } $DB->commit; $DB->disconnect; ---- trace.log ---- DBI::db=HASH(0x81001fc) trace level set to 10 in DBI 1.20-nothread Note: perl is running without the recommended perl -w option -> prepare for DBD::Oracle::db (DBI::db=HASH(0x81002b0)~0x81001fc ' SELECT * FROM test ') dbih_setup_handle(DBI::st=HASH(0x8100370)=>DBI::st=HASH(0x8100028), DBD::Oracle::st, 810037c, Null!) dbih_make_com(DBI::db=HASH(0x81001fc), DBD::Oracle::st, 208) dbih_setup_attrib(DBI::st=HASH(0x8100028), Err, DBI::db=HASH(0x81001fc)) SCALAR(0x8177b74) (already defined) dbih_setup_attrib(DBI::st=HASH(0x8100028), State, DBI::db=HASH(0x81001fc)) SCALAR(0x819a9a8) (already defined) dbih_setup_attrib(DBI::st=HASH(0x8100028), Errstr, DBI::db=HASH(0x81001fc)) SCALAR(0x8177b5c) (already defined) dbih_setup_attrib(DBI::st=HASH(0x8100028), Handlers, DBI::db=HASH(0x81001fc)) ARRAY(0x8100274) (already defined) dbih_setup_attrib(DBI::st=HASH(0x8100028), Debug, DBI::db=HASH(0x81001fc)) 10 (already defined) dbih_setup_attrib(DBI::st=HASH(0x8100028), FetchHashKeyName, DBI::db=HASH(0x81001fc)) 'NAME' (already defined) OCIHandleAlloc(0x81f7cb0,0x825d2c8,OCI_HTYPE_STMT,0,(nil))=SUCCESS OCIStmtPrepare(0x825c5e8,0x821057c,' SELECT * FROM test ',22,1,0)=SUCCESS OCIAttrGet(0x825c5e8,OCI_HTYPE_STMT,0x825d2cc,(nil),24,0x821057c)=SUCCESS dbd_st_prepare'd sql SELECT dbd_describe SELECT (EXPLICIT, lb 80)... OCIStmtExecute(0x8210510,0x825c5e8,0x821057c,0,0,(nil),(nil),16)=SUCCESS OCIAttrGet(0x825c5e8,OCI_HTYPE_STMT,0xbffff3c8,(nil),18,0x821057c)=SUCCESS OCIParamGet(0x825c5e8,4,0x821057c,0x826f278,1)=SUCCESS OCIAttrGet(0x825c498,OCI_DTYPE_PARAM,0x826f28e,(nil),2,0x821057c)=SUCCESS OCIAttrGet(0x825c498,OCI_DTYPE_PARAM,0x826f28c,(nil),1,0x821057c)=SUCCESS OCIAttrGet(0x825c498,OCI_DTYPE_PARAM,0x826f290,(nil),5,0x821057c)=SUCCESS OCIAttrGet(0x825c498,OCI_DTYPE_PARAM,0x826f292,(nil),6,0x821057c)=SUCCESS OCIAttrGet(0x825c498,OCI_DTYPE_PARAM,0x826f293,(nil),7,0x821057c)=SUCCESS OCIAttrGet(0x825c498,OCI_DTYPE_PARAM,0x826f2a0,0xbffff3c4,4,0x821057c)=SUCCESS fbh 1: 'DATA' NO null , otype 1-> 5, dbsize 10/11, p10.s0 OCIAttrSet(0x825c5e8,OCI_HTYPE_STMT,0xbffff3c0,4,11,0x821057c)=SUCCESS OCIDefineByPos(0x825c5e8,0x826f27c,0x821057c,1,0x826f460,11,5,0x826f470,0x826f480,0x826f490,0)=SUCCESS dbd_describe'd 1 columns (row bytes: 10 max, 10 est avg, cache: 634) <- prepare= DBI::st=HASH(0x8100370) at dbdtest.pl line 52 -> execute for DBD::Oracle::st (DBI::st=HASH(0x8100370)~0x8100028) dbd_st_execute SELECT (out0, lob0)... OCIStmtExecute(0x8210510,0x825c5e8,0x821057c,0,0,(nil),(nil),0)=SUCCESS OCIAttrGet(0x825c5e8,OCI_HTYPE_STMT,0xbffff5ca,(nil),10,0x821057c)=SUCCESS dbd_st_execute SELECT returned (SUCCESS, rpc0, fn4, out0) <- execute= '0E0' at dbdtest.pl line 57 -> fetchrow_arrayref for DBD::Oracle::st (DBI::st=HASH(0x8100370)~0x8100028) dbd_st_fetch 1 fields... OCIStmtFetch(0x825c5e8,0x821057c,1,2,0)=SUCCESS_WITH_INFO dbih_setup_fbav for 1 fields => 0x81003c4 dbd_st_fetch 1 fields SUCCESS_WITH_INFO OCIErrorGet(0x821057c,1,"<NULL>",0xbffff0dc,"ORA-24345: A Truncation or null fetch error occurred ",1024,2)=SUCCESS OCIErrorGet after ORA-01406 error on field 1 of 1, ora_type 1 (er1:ok): -1, 24345: ORA-24345: A Truncation or null fetch error occurred OCIErrorGet(0x821057c,2,"<NULL>",0xbffff0dc,"ORA-24345: A Truncation or null fetch error occurred ",1024,2)=NO_DATA ERROR EVENT 24345 'ORA-24345: A Truncation or null fetch error occurred (DBD ERROR: ORA-01406 error on field 1 of 1, ora_type 1)' on DBI::st=HASH(0x8100028) 0 (rc=1406): '√.※√..√.→' !! ERROR: 24345 'ORA-24345: A Truncation or null fetch error occurred (DBD ERROR: ORA-01406 error on field 1 of 1, ora_type 1)' <- fetchrow_arrayref= undef row1 at dbdtest.pl line 59 -> DESTROY for DBD::Oracle::st (DBI::st=HASH(0x8100028)~INNER) OCIStmtFetch(0x825c5e8,0x821057c,0,2,0)=SUCCESS OCIHandleFree(0x825c5e8,OCI_HTYPE_STMT)=SUCCESS <- DESTROY= undef -> DESTROY for DBD::Oracle::db (DBI::db=HASH(0x81001fc)~INNER) OCITransRollback(0x8210510,0x821057c,0)=SUCCESS OCISessionEnd(0x8210510,0x821057c,0x821038c,0)=SUCCESS OCIServerDetach(0x8210aa8,0x821057c,0)=SUCCESS OCIHandleFree(0x821038c,OCI_HTYPE_SESSION)=SUCCESS OCIHandleFree(0x8210aa8,OCI_HTYPE_SERVER)=SUCCESS OCIHandleFree(0x8210510,OCI_HTYPE_SVCCTX)=SUCCESS OCIHandleFree(0x821057c,OCI_HTYPE_ERROR)=SUCCESS <- DESTROY= undef during global destruction