Hello,
Can anyone explain why the long tests fail if the Oracle character set is
set as UTF8?
i.e.
NLS_LANG="ENGLISH_UNITED KINGDOM.UTF8"; export NLS_LANG
make
make test
....
t/long..............ok 97/143Use of uninitialized value in numeric eq (==)
at t/long.t line 230.
# failed test 98 at line 230. ORA-01403: no data found (DBD NEED_DATA:
OCILobRead)
t/long..............NOK 98Use of uninitialized value in string eq at
t/long.t line 231.
Use of uninitialized value in length at t/long.t line 345.
Use of uninitialized value in string eq at t/long.t line 346.
# failed test 99 at line 231. Strings are of different lengths (0 vs 10240)
t/long..............NOK 99# failed test 100 at line 233. ORA-01403: no data
found (DBD (UNKNOWN OCI STATUS 1010): OCIStmtFetch)
t/long..............NOK 100Use of uninitialized value in numeric eq (==) at
t/long.t line 234.
# failed test 101 at line 234. ORA-03130: the buffer for the next piece to
be fetched is required (DBD ERROR: OCILobGetLength)
t/long..............NOK 101Use of uninitialized value in string eq at
t/long.t line 235.
Use of uninitialized value in length at t/long.t line 345.
Use of uninitialized value in string eq at t/long.t line 346.
# failed test 102 at line 235. Strings are of different lengths (0 vs 81920)
t/long..............NOK 102# failed test 103 at line 237. ERROR no statement
executing (perhaps you need to call execute first)
t/long..............NOK 103Use of uninitialized value in numeric eq (==) at
t/long.t line 240.
Use of uninitialized value in numeric eq (==) at t/long.t line 240.
Use of uninitialized value in concatenation (.) or string at t/long.t line
262.
# failed test 104 at line 262. Fetched length , expected 71680
t/long..............NOK 104# failed test 105 at line 263.
t/long..............NOK 105Unable to create test table for 'BLOB' data
(3127). Tests skipped.
t/long..............ok 140/143# failed test 141 at line 86. lob_locator
false
t/long..............NOK 141# failed test 142 at line 87.
t/long..............NOK 142# failed test 143 at line 88. lob_locator deref
ptr false
t/long..............NOK 143
Some tests for LONG data type handling failed. These are generally Oracle
bugs.
Please report this to the dbi-users mailing list, and include the
Oracle version number of both the client and the server.
Please also include the output of the 'perl -V' command.
(If you can, please study t/long.t to investigate the cause.
Feel free to edit the tests to see what's happening in more detail.
Especially by adding trace() calls around the failing tests.
Run the tests manually using the command "perl -Mblib t/long.t")
Meanwhile, if the other tests have passed you can use DBD::Oracle.
Set the character set to a single byte one, and there are no problems. e.g.:
NLS_LANG="ENGLISH_UNITED KINGDOM.WE8ISO8859P1"; export NLS_LANG
Note that our database has a UTF8 character set internally.
We are using a standard Perl 5.6.1 on Solaris 8:
Summary of my perl5 (revision 5.0 version 6 subversion 1) configuration:
Platform:
osname=solaris, osvers=2.8, archname=sun4-solaris
uname='sunos solaris 5.8 generic sun4u sparc sunw,ultra-5_10 '
config_args='-Dcc=gcc -de'
hint=recommended, useposix=true, d_sigaction=define
usethreads=undef use5005threads=undef useithreads=undef
usemultiplicity=undef
useperlio=undef d_sfio=undef uselargefiles=define usesocks=undef
use64bitint=undef use64bitall=undef uselongdouble=undef
Compiler:
cc='gcc', ccflags
='-fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFS
ET_BITS=64',
optimize='-O',
cppflags='-fno-strict-aliasing -I/usr/local/include'
ccversion='', gccversion='2.95.3 20010315 (release)',
gccosandvers='solaris2.8'
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=4321
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t',
lseeksize=8
alignbytes=8, usemymalloc=y, prototype=define
Linker and Libraries:
ld='gcc', ldflags =' -L/usr/local/lib '
libpth=/usr/local/lib /usr/lib /usr/ccs/lib
libs=-lsocket -lnsl -lgdbm -ldb -ldl -lm -lc
perllibs=-lsocket -lnsl -ldl -lm -lc
libc=/lib/libc.so, so=so, useshrplib=false, libperl=libperl.a
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags=' '
cccdlflags='-fPIC', lddlflags='-G -L/usr/local/lib'
Characteristics of this binary (from libperl):
Compile-time options: USE_LARGE_FILES
Built under solaris
Compiled at Apr 26 2001 04:07:49
%ENV:
PERL_NLS_LANG="ENGLISH_UNITED KINGDOM.WE8ISO8859P1"
@INC:
/usr/local/lib/perl5/5.6.1/sun4-solaris
/usr/local/lib/perl5/5.6.1
/usr/local/lib/perl5/site_perl/5.6.1/sun4-solaris
/usr/local/lib/perl5/site_perl/5.6.1
/usr/local/lib/perl5/site_perl
.
This is not really a problem for us, as Perl 5.6.1 is Unicode deficient
anyway - so we are happy for the DB client tools to convert from WE8ISO...
to UTF8. Just wondering why it didn't cope?
Thanks.
Ben.