This issue was previously reported by other people in thread "DBD-Oracle
1.23 reports ORA-24334 in t/58object.t" but I could not find any
answers.
I'm trying to install DBD-Oracle 1.24a with this environment:
- perl 5.8.7 built for sun4-solaris-64
- gcc 4.0.2
- Solaris 10 update 6
- Oracle 10.2.0.4
The build succeeds, but an ORA-24334 error is reported in the test
script t/58object.t:
> perl -Mblib t/58object.t
1..51
ok 1 - use DBI;
ok 2 - ora_objects flag is set to 1
ok 3 - ora_objects flag is set to 0
ok 4 - The object isa DBI::db
ok 5 - Fetch current schema name
DBD::Oracle::db prepare failed: ORA-24334: no descriptor for this
position (DBD ERROR: OCIParamGet) [for Statement "select * from
dbd_test__obj_table order by id"] at t/58object.t line 116.
The DBI trace output from level 5 for the error:
<- do= 1 at t/58object.t line 109
-> prepare for DBD::Oracle::db
(DBI::db=HASH(0x100745310)~0x100745250 'select * from
dbd_test__obj_table order by id')
New 'DBI::st' (for DBD::Oracle::st,
parent=DBI::db=HASH(0x100745250), id=undef)
dbih_setup_handle(DBI::st=HASH(0x100745c70)=>DBI::st=HASH(0x100745970),
DBD::Oracle::st, 100922140, Null!)
dbih_make_com(DBI::db=HASH(0x100745250), 100746e70, DBD::Oracle::st,
464, 0) thr#0
dbih_setup_attrib(DBI::st=HASH(0x100745970), Err,
DBI::db=HASH(0x100745250)) SCALAR(0x1004408a0) (already defined)
dbih_setup_attrib(DBI::st=HASH(0x100745970), State,
DBI::db=HASH(0x100745250)) SCALAR(0x100440920) (already defined)
dbih_setup_attrib(DBI::st=HASH(0x100745970), Errstr,
DBI::db=HASH(0x100745250)) SCALAR(0x1004408e0) (already defined)
dbih_setup_attrib(DBI::st=HASH(0x100745970), TraceLevel,
DBI::db=HASH(0x100745250)) 0 (already defined)
dbih_setup_attrib(DBI::st=HASH(0x100745970), FetchHashKeyName,
DBI::db=HASH(0x100745250)) 'NAME' (already defined)
dbih_setup_attrib(DBI::st=HASH(0x100745970), HandleSetErr,
DBI::db=HASH(0x100745250)) undef (not defined)
dbih_setup_attrib(DBI::st=HASH(0x100745970), HandleError,
DBI::db=HASH(0x100745250)) undef (not defined)
dbih_setup_attrib(DBI::st=HASH(0x100745970), ReadOnly,
DBI::db=HASH(0x100745250)) undef (not defined)
dbih_setup_attrib(DBI::st=HASH(0x100745970), Profile,
DBI::db=HASH(0x100745250)) undef (not defined)
dbd_st_prepare'd sql SELECT (pl1, auto_lob1, check_sql1)
dbd_describe SELECT (EXPLICIT, lb 80)...
Describe col #1 type=2(NVARCHAR2)
Described col 1: dbtype 2(NVARCHAR2), scale 0, prec 38, nullok 1, name
ID
: dbsize 22, char_used 0, char_size 0, csid 0, csform
0(0), disize 171
fbh 1: 'ID' NULLable, otype 2-> 5, dbsize 22/172, p38.s0
Describe col #2 type=108(ORA_XMLTYPE or SQLT_NTY)
Described col 2: dbtype 108(ORA_XMLTYPE or SQLT_NTY), scale 0, prec 0,
nullok 1, name OBJ
: dbsize 2000, char_used 0, char_size 0, csid 0,
csform 0(0), disize 0
fbh 2: 'OBJ' NULLable, otype 108->108, dbsize 2000/0, p0.s0
cache settings DB Handle RowCacheSize=0,Statement Handle
RowCacheSize=0, OCI_ATTR_PREFETCH_ROWS=60, OCI_ATTR_PREFETCH_MEMORY=0,
Rows per Fetch=60, Multiple Row Fetch=Off
Field #2 is a object or colection of some sort. Using OCIDefineObject
and or OCIObjectPin
At level=0 in description an embedded object
OCIErrorGet after OCIParamGet (er1:ok): -1, 24334: ORA-24334: no
descriptor for this position
level=0 type_name = TIM.DBD_TEST__TYPE_A
type_namel = 0
parmdp = 1008216f8
parmap = 0
tdo = 10093abf0
typecode = OBJECT
col_typecode = 0
element_typecode = (UNKNOWN OCI TYPECODE 0)
obj_ref = 100944e00
obj_value = 0
obj_type = 10093abf0
is_final_type = 0
field_count = 131072
fields = 10094d960
--->sub objects
level=1 type_name = NUM
type_namel = 3
parmdp = 0
parmap = 0
tdo = 0
typecode = INT
col_typecode = 0
element_typecode = (UNKNOWN OCI TYPECODE 0)
obj_ref = 0
obj_value = 0
obj_type = 0
is_final_type = 0
field_count = 0
fields = 0
--->done NUM
--->sub objects
level=1 type_name = NAME
type_namel = 4
parmdp = 0
parmap = 0
tdo = 0
typecode = VARCHAR2
col_typecode = 0
element_typecode = (UNKNOWN OCI TYPECODE 0)
obj_ref = 0
obj_value = 0
obj_type = 0
is_final_type = 0
field_count = 0
fields = 0
--->done NAME
--->sub objects
level=1 type_name = (null)
type_namel = 0
parmdp = 0
parmap = 0
tdo = 0
typecode = (UNKNOWN OCI TYPECODE 0)
col_typecode = 0
element_typecode = (UNKNOWN OCI TYPECODE 0)
obj_ref = 0
obj_value = 0
obj_type = 0
is_final_type = 0
field_count = 0
fields = 0
--->done (null)
[many many more null objects are logged in the trace]
Details of the configurations:
> perl -V
Summary of my perl5 (revision 5 version 8 subversion 7) configuration:
Platform:
osname=solaris, osvers=2.10, archname=sun4-solaris-64
uname='sunos rfu01 5.10 generic_120011-14 sun4u sparc
sunw,sun-fire-v240 '
config_args='-Dprefix=/opt/perl/5.8.7 -Dcc=gcc -Accflags=-mcpu=v9
-m64 -Aldflags=-mcpu=v9 -m64 -Alddlflags=-mcpu=v9 -m64 -Duse64bitall'
hint=recommended, useposix=true, d_sigaction=define
usethreads=undef use5005threads=undef useithreads=undef
usemultiplicity=undef
useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
use64bitint=define use64bitall=define uselongdouble=undef
usemymalloc=n, bincompat5005=undef
Compiler:
cc='gcc', ccflags ='-mcpu=v9 -m64 -mcpu=v9 -m64 -fno-strict-aliasing
-pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
optimize='-O',
cppflags='-mcpu=v9 -m64 -mcpu=v9 -m64 -fno-strict-aliasing -pipe
-I/usr/local/include'
ccversion='', gccversion='4.0.2', gccosandvers=''
intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=87654321
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t',
lseeksize=8
alignbytes=8, prototype=define
Linker and Libraries:
ld='gcc', ldflags ='-m64 -mcpu=v9 -m64 -L/usr/local/lib/64
-L/usr/lib/sparcv9 -L/usr/local/lib -L/usr/lib -L/usr/ccs/lib
-R/usr/local/lib/64 -R/usr/local/lib '
libpth=/usr/local/lib/64 /usr/lib/sparcv9 /usr/local/lib /usr/lib
/usr/ccs/lib
libs=-lsocket -lnsl -ldb -ldl -lm -lc
perllibs=-lsocket -lnsl -ldl -lm -lc
libc=/usr/lib/sparcv9/libc.so, so=so, useshrplib=false,
libperl=libperl.a
gnulibc_version=''
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags=' '
cccdlflags='-fPIC', lddlflags=' -G -m64 -mcpu=v9 -m64
-L/usr/local/lib/64 -L/usr/lib/sparcv9 -L/usr/local/lib -L/usr/lib
-L/usr/ccs/lib -R/usr/local/lib/64 -R/usr/local/lib'
Characteristics of this binary (from libperl):
Compile-time options: USE_64_BIT_INT USE_64_BIT_ALL USE_LARGE_FILES
Built under solaris
Compiled at Apr 9 2010 08:32:56
@INC:
/opt/perl/5.8.7/lib/5.8.7/sun4-solaris-64
/opt/perl/5.8.7/lib/5.8.7
/opt/perl/5.8.7/lib/site_perl/5.8.7/sun4-solaris-64
/opt/perl/5.8.7/lib/site_perl/5.8.7
/opt/perl/5.8.7/lib/site_perl
.
> gcc -v
Using built-in specs.
Target: sparc-sun-solaris2.10
Configured with: /depot/src/gcc/dist/gcc-4.0.2/configure
--with-as=/usr/ccs/bin/as --with-ld=/usr/ccs/bin/ld --disable-nls
--enable-languages=c,c++,objc,java --prefix=/opt/gcc/4.0.2
Thread model: posix
gcc version 4.0.2
Build session log:
> perl Makefile.PL
Using DBI 1.609 (for perl 5.008007 on sun4-solaris-64) installed in
/opt/perl/5.8.7/lib/site_perl/5.8.7/sun4-solaris-64/auto/DBI/
Configuring DBD::Oracle for perl 5.008007 on solaris (sun4-solaris-64)
Remember to actually *READ* the README file! Especially if you have any
problems.
Installing on a solaris, Ver#2.10
Using Oracle in /u01/app/oracle/product/10.2.0
DEFINE _SQLPLUS_RELEASE = "1002000400" (CHAR)
Oracle version 10.2.0.4 (10.2)
Found /u01/app/oracle/product/10.2.0/rdbms/demo/demo_rdbms.mk
Found /u01/app/oracle/product/10.2.0/rdbms/demo/demo_rdbms64.mk
Found /u01/app/oracle/product/10.2.0/rdbms/lib/ins_rdbms.mk
Using /u01/app/oracle/product/10.2.0/rdbms/demo/demo_rdbms.mk
Your LD_LIBRARY_PATH env var is set to
'/u01/app/oracle/product/10.2.0/lib:'
Reading /u01/app/oracle/product/10.2.0/rdbms/demo/demo_rdbms.mk
Reading /u01/app/oracle/product/10.2.0/rdbms/lib/env_rdbms.mk
Attempting to discover Oracle OCI build rules
gcc -c DBD_ORA_OBJ.c
by executing: [make -f
/u01/app/oracle/product/10.2.0/rdbms/demo/demo_rdbms.mk build
ECHODO=echo ECHO=echo GENCLNTSH='echo genclntsh' CC=true OPTIMIZE=
CCFLAGS= EXE=DBD_ORA_EXE OBJS=DBD_ORA_OBJ.o]
Oracle oci build command:
[true -xarch=v9 -L/u01/app/oracle/product/10.2.0/lib/
-L/u01/app/oracle/product/10.2.0/rdbms/lib/ -o DBD_ORA_EXE DBD_ORA_OBJ.o
-lclntsh `cat /u01/app/oracle/product/10.2.0/lib/sysliblist`
-R/u01/app/oracle/product/10.2.0/lib -laio -lposix4 -lkstat -lm
-lthread -lpthread]
Found header files in /u01/app/oracle/product/10.2.0/rdbms/public.
Checking for functioning wait.ph
System: perl5.008007 sunos rfu01 5.10 generic_120011-14 sun4u sparc
sunw,sun-fire-v240
Compiler: gcc -O -mcpu=v9 -m64 -mcpu=v9 -m64 -fno-strict-aliasing
-pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
Linker: /usr/ccs/bin/ld
Sysliblist: -lkstat -lnsl -lsocket -lgen -ldl -lsched
Oracle makefiles would have used these definitions but we override them:
CC: cc
CFLAGS: $(GFLAG) $(OPTIMIZE) $(CDEBUG) $(CCFLAGS) $(PFLAGS)\
$(SHARED_CFLAG) $(USRFLAGS)
[$(GFLAG) -xO3 $(CDEBUG) -Xa $(PROFILE) -xstrconst -dalign
-xF $(XS) $(MR) -xildoff -errtags=yes -v -xarch=v9 -xchip=ultra3
-W2,-AKNR_S -Wd,-xsafe=unboundsym -Wc,-Qiselect-funcalign=32
-xcode=abs44 -Wc,-Qgsched-trace_late=1 -Wc,-Qgsched-T5
-xalias_level=weak -D_REENTRANT -DSS_64BIT_SERVER -DBIT64 -DMACHINE64 -K
PIC -I/u01/app/oracle/product/10.2.0/rdbms/demo
-I/u01/app/oracle/product/10.2.0/rdbms/public
-I/u01/app/oracle/product/10.2.0/plsql/public
-I/u01/app/oracle/product/10.2.0/network/public -DSLMXMX_ENABLE
-DSLTS_ENABLE -D_SVID_GETTOD -D_REENTRANT $(LPFLAGS) $(USRFLAGS)]
LDFLAGS: -o $@ $(LDPATHFLAG)$(PRODLIBHOME) $(LDPATHFLAG)$(LIBHOME)
[-o $@ -L/u01/app/oracle/product/10.2.0/rdbms/lib/
-L$(LIBHOME)]
Linking with OTHERLDFLAGS = -xarch=v9
-L/u01/app/oracle/product/10.2.0/lib/
-L/u01/app/oracle/product/10.2.0/rdbms/lib/ -lclntsh `cat
/u01/app/oracle/product/10.2.0/lib/sysliblist`
-R/u01/app/oracle/product/10.2.0/lib -laio -lposix4 -lkstat -lm
-lthread -lpthread [from 'build' rule]
WARNING: If you have problems you may need to rebuild perl with
threading enabled.
Checking if your kit is complete...
Looks good
LD_RUN_PATH=/u01/app/oracle/product/10.2.0/lib:/u01/app/oracle/product/1
0.2.0/rdbms/lib
Using DBD::Oracle 1.24.
Using DBD::Oracle 1.24.
Using DBI 1.609 (for perl 5.008007 on sun4-solaris-64) installed in
/opt/perl/5.8.7/lib/site_perl/5.8.7/sun4-solaris-64/auto/DBI/
Writing Makefile for DBD::Oracle
*** If you have problems...
read all the log printed above, and the README and README.help.txt
files.
(Of course, you have read README by now anyway, haven't you?)
> make
cp Oracle.pm blib/lib/DBD/Oracle.pm
cp oraperl.ph blib/lib/oraperl.ph
cp dbdimp.h blib/arch/auto/DBD/Oracle/dbdimp.h
cp ocitrace.h blib/arch/auto/DBD/Oracle/ocitrace.h
cp Oraperl.pm blib/lib/Oraperl.pm
cp Oracle.h blib/arch/auto/DBD/Oracle/Oracle.h
cp lib/DBD/Oracle/Object.pm blib/lib/DBD/Oracle/Object.pm
cp mk.pm blib/arch/auto/DBD/Oracle/mk.pm
cp lib/DBD/Oracle/GetInfo.pm blib/lib/DBD/Oracle/GetInfo.pm
/opt/perl/5.8.7/bin/perl -p -e "s/~DRIVER~/Oracle/g"
/opt/perl/5.8.7/lib/site_perl/5.8.7/sun4-solaris-64/auto/DBI/Driver.xst
> Oracle.xsi
/opt/perl/5.8.7/bin/perl /opt/perl/5.8.7/lib/5.8.7/ExtUtils/xsubpp
-typemap /opt/perl/5.8.7/lib/5.8.7/ExtUtils/typemap -typemap typemap
Oracle.xs > Oracle.xsc && mv Oracle.xsc Oracle.c
gcc -c -I/u01/app/oracle/product/10.2.0/rdbms/public
-I/u01/app/oracle/product/10.2.0/rdbms/demo
-I/u01/app/oracle/product/10.2.0/rdbms/public
-I/u01/app/oracle/product/10.2.0/plsql/public
-I/u01/app/oracle/product/10.2.0/network/public
-I/opt/perl/5.8.7/lib/site_perl/5.8.7/sun4-solaris-64/auto/DBI -mcpu=v9
-m64 -mcpu=v9 -m64 -fno-strict-aliasing -pipe -I/usr/local/include
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O -DVERSION=\"1.24\"
-DXS_VERSION=\"1.24\" -fPIC
"-I/opt/perl/5.8.7/lib/5.8.7/sun4-solaris-64/CORE" -Wall -Wno-comment
-DUTF8_SUPPORT -DNEW_OCI_INIT -DORA_OCI_VERSION=\"10.2.0.4\" Oracle.c
gcc -c -I/u01/app/oracle/product/10.2.0/rdbms/public
-I/u01/app/oracle/product/10.2.0/rdbms/demo
-I/u01/app/oracle/product/10.2.0/rdbms/public
-I/u01/app/oracle/product/10.2.0/plsql/public
-I/u01/app/oracle/product/10.2.0/network/public
-I/opt/perl/5.8.7/lib/site_perl/5.8.7/sun4-solaris-64/auto/DBI -mcpu=v9
-m64 -mcpu=v9 -m64 -fno-strict-aliasing -pipe -I/usr/local/include
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O -DVERSION=\"1.24\"
-DXS_VERSION=\"1.24\" -fPIC
"-I/opt/perl/5.8.7/lib/5.8.7/sun4-solaris-64/CORE" -Wall -Wno-comment
-DUTF8_SUPPORT -DNEW_OCI_INIT -DORA_OCI_VERSION=\"10.2.0.4\" dbdimp.c
dbdimp.c: In function 'fb_ary_cb_alloc':
dbdimp.c:298: warning: comparison is always false due to limited range
of data type
dbdimp.c:299: warning: comparison is always false due to limited range
of data type
dbdimp.c:300: warning: comparison is always false due to limited range
of data type
dbdimp.c:301: warning: comparison is always false due to limited range
of data type
dbdimp.c:302: warning: comparison is always false due to limited range
of data type
dbdimp.c: In function 'fb_ary_alloc':
dbdimp.c:318: warning: comparison is always false due to limited range
of data type
dbdimp.c:319: warning: comparison is always false due to limited range
of data type
dbdimp.c:320: warning: comparison is always false due to limited range
of data type
dbdimp.c:321: warning: comparison is always false due to limited range
of data type
gcc -c -I/u01/app/oracle/product/10.2.0/rdbms/public
-I/u01/app/oracle/product/10.2.0/rdbms/demo
-I/u01/app/oracle/product/10.2.0/rdbms/public
-I/u01/app/oracle/product/10.2.0/plsql/public
-I/u01/app/oracle/product/10.2.0/network/public
-I/opt/perl/5.8.7/lib/site_perl/5.8.7/sun4-solaris-64/auto/DBI -mcpu=v9
-m64 -mcpu=v9 -m64 -fno-strict-aliasing -pipe -I/usr/local/include
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O -DVERSION=\"1.24\"
-DXS_VERSION=\"1.24\" -fPIC
"-I/opt/perl/5.8.7/lib/5.8.7/sun4-solaris-64/CORE" -Wall -Wno-comment
-DUTF8_SUPPORT -DNEW_OCI_INIT -DORA_OCI_VERSION=\"10.2.0.4\" oci8.c
oci8.c: In function 'ora_blob_read_mb_piece':
oci8.c:1597: warning: comparison is always false due to limited range of
data type
oci8.c: In function 'describe_obj_by_tdo':
oci8.c:2957: warning: comparison is always false due to limited range of
data type
oci8.c: In function 'ora_describe':
oci8.c:3158: warning: comparison is always false due to limited range of
data type
Running Mkbootstrap for DBD::Oracle ()
chmod 644 Oracle.bs
rm -f blib/arch/auto/DBD/Oracle/Oracle.so
LD_RUN_PATH="/u01/app/oracle/product/10.2.0/lib:/u01/app/oracle/product/
10.2.0/rdbms/lib" gcc -G -m64 -mcpu=v9 -m64 -L/usr/local/lib/64
-L/usr/lib/sparcv9 -L/usr/local/lib -L/usr/lib -L/usr/ccs/lib
-R/usr/local/lib/64 -R/usr/local/lib Oracle.o dbdimp.o oci8.o
-xarch=v9 -L/u01/app/oracle/product/10.2.0/lib/
-L/u01/app/oracle/product/10.2.0/rdbms/lib/ -lclntsh `cat
/u01/app/oracle/product/10.2.0/lib/sysliblist`
-R/u01/app/oracle/product/10.2.0/lib -laio -lposix4 -lkstat -lm
-lthread -lpthread -o blib/arch/auto/DBD/Oracle/Oracle.so \
\
chmod 755 blib/arch/auto/DBD/Oracle/Oracle.so
cp Oracle.bs blib/arch/auto/DBD/Oracle/Oracle.bs
chmod 644 blib/arch/auto/DBD/Oracle/Oracle.bs
/opt/perl/5.8.7/bin/perl "-Iblib/arch" "-Iblib/lib" ora_explain.PL
ora_explain
Extracted ora_explain from ora_explain.PL with variable substitutions.
cp ora_explain blib/script/ora_explain
/opt/perl/5.8.7/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' --
blib/script/ora_explain
Manifying blib/man1/ora_explain.1
Manifying blib/man3/DBD::Oracle.3
Manifying blib/man3/DBD::Oraperl.3
> make test
PERL_DL_NONLAZY=1 /opt/perl/5.8.7/bin/perl "-MExtUtils::Command::MM"
"-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/01base.t .............. # Test loading DBI, DBD::Oracle and version
t/01base.t .............. ok
t/10general.t ........... ok
t/12impdata.t ........... ok
t/14threads.t ........... skipped: this solaris perl 5.008007 not
configured to support iThreads
t/15nls.t ............... ok
t/20select.t ............ ok
t/21nchar.t ............. ok
t/22nchar_al32utf8.t .... ok
t/22nchar_utf8.t ........ ok
t/23wide_db.t ........... ok
t/23wide_db_8bit.t ...... ok
t/23wide_db_al32utf8.t .. ok
t/24implicit_utf8.t ..... ok
t/25plsql.t ............. ok
t/26exe_array.t ......... ok
t/28array_bind.t ........ ok
t/30long.t .............. ok
t/31lob.t ............... ok
t/31lob_extended.t ...... ok
t/32xmltype.t ........... ok
t/34pres_lobs.t ......... ok
t/40ph_type.t ........... 1/19 Placeholder behaviour for ora_type=1
VARCHAR2 (the default) varies with Oracle version.
Oracle 7 didn't strip trailing spaces, Oracle 8 did, until 9.2.x
Your system doesn't. If that seems odd, let us know.
t/40ph_type.t ........... ok
t/50cursor.t ............ ok
t/51scroll.t ............ ok
t/55nested.t ............ ok
t/56embbeded.t .......... ok
t/58object.t ............ 1/51 DBD::Oracle::db prepare failed:
ORA-24334: no descriptor for this position (DBD ERROR: OCIParamGet) [for
Statement "select * from dbd_test__obj_table order by id"] at
t/58object.t line 116.
t/58object.t ............ Dubious, test returned 255 (wstat 65280,
0xff00)
Failed 46/51 subtests
t/60reauth.t ............ skipped: ORACLE_USERID_2 not defined.
t/70meta.t .............. ok
t/80ora_charset.t ....... ok
Test Summary Report
-------------------
t/58object.t (Wstat: 65280 Tests: 5 Failed: 0)
Non-zero exit status: 255
Parse errors: Bad plan. You planned 51 tests but ran 5.
Files=30, Tests=2160, 78 wallclock secs ( 0.62 usr 0.59 sys + 10.92
cusr 2.56 csys = 14.69 CPU)
Result: FAIL
Failed 1/30 test programs. 0/2160 subtests failed.
*** Error code 255
make: Fatal error: Command failed for target `test_dynamic'
Thank you for your help.
Tim Everett