Hi, I'm experiencing a problem in DBD::Oracle calling a procedure which returns a lob but sometimes the lob is not set. We use ora_auto_lob = 0 so we can retrieve the lob ourselves but I cannot see how to know the lob is empty and calling ora_lob_length returns an error:
DBD::Oracle::db ora_lob_length failed: (DBD INVALID_HANDLE: OCILobGetLength) at empty_lob.pl line 26. The following code illustrates the problem: use strict; use warnings; use DBI; use DBD::Oracle qw(:ora_types); use Data::Dumper; my $h = DBI->connect; $h->do(<<'EOT'); create procedure p_mje(plob OUT NOCOPY clob) AS BEGIN NULL; END; EOT my $s = $h->prepare(<<'EOT', {ora_auto_lob => 0, ora_check_sql => 0}); begin p_mje(?); end; EOT my $lob; $s->bind_param_inout(1, \$lob, 20, {ora_type => ORA_CLOB}); $s->execute; print Dumper([$lob]); # following line errors my $len = $h->ora_lob_length($lob); END { $h->do(q{drop procedure p_mje}); } The output is: $ perl empty_lob.pl $VAR1 = [ bless( do{\(my $o = 168781336)}, 'OCILobLocatorPtr' ) ]; DBD::Oracle::db ora_lob_length failed: (DBD INVALID_HANDLE: OCILobGetLength) at empty_lob.pl line 26. Any ideas how to detect an empty lob in this case? BTW, there are 3 typos in the pod in the following sentence: "A word of catution when using the data retruned from an ora_lob_read in a condtional statement. for example if the code below;" Martin -- Martin J. Evans Easysoft Limited http://www.easysoft.com