You didn't say which version of DBD::Oracle you are useing
anyway you DBI is rather old.
Update to the latest DBD::oracle and DBI then give it a try.
cheers
John Scoles
> Hello,
>
> I'm having an issue with getting a sys_refcursor back from a function.
>
> Particulars:
> PERL version: 5.8.3
> Oracle Client: 10.2.0.4 32 bit (using lib32)
> DBI version 1.41
>
> The function returns a sys_refcursor.
>
> $sth = $dbh->prepare(q{begin :csr := my_function('12345','','');
> end;});
>
> my $sth2;
> $sth->bind_param_inout(":csr", \$sth2, 0, { ora_type => ORA_RSET } );
>
> $sth->execute();
>
> $sth->finish;
> $dbh->disconnect;
>
>
> It fails and produces the following output:
>
>
> Field 9 has an Oracle type (108) which is not explicitly supported
> at ./test4_ora.pl line 23.
> Field 18 has an Oracle type (108) which is not explicitly supported
> at ./test4_ora.pl line 23.
> Field 19 has an Oracle type (108) which is not explicitly supported
> at ./test4_ora.pl line 23.
> Field 20 has an Oracle type (108) which is not explicitly supported
> at ./test4_ora.pl line 23.
> DBD::Oracle::st execute failed: ERROR OCIDefineObject call needed but
> not implemented yet [for Statement "declare csr sys_refcursor;
> begin :csr := my_function('12345','',''); end;" with
> ParamValues: :csr=DBI::st=HASH(0x33180c)] at ./test4_ora.pl line 23.
>
>
> However I can execute the function if I don't use the
> bind_param_inout:
>
> $sth = $dbh->prepare(q{declare csr sys_refcursor; begin csr :=
> my_function('12345','',''); end;});
> $sth->execute();
>
> and it does not give me any errors.
>
> I've tried:
>
> $sth = $dbh->prepare(q{declare csr sys_refcursor; begin csr :=
> my_function('12345','',''); csr2 := csr; end;});
>
> my $sth2;
> $sth->bind_param_inout(":csr2", \$sth2, 0, { ora_type => ORA_RSET } );
>
> and it gives me the same Oracle type (108) errors.
>
> Is there an issue with the DBI version I'm using along with my Oracle
> client or am I not doing something right?
>
> I appreciate your help.
>
> Phil
>
>
>