I've searched the DBI mailing list archive, the perldoc, and various example sites and have found no way to execute a pl/sql function that returns an abstract data type (i.e., a record). The example that I'm trying to construct is to call sys.utl_file.fopen() which returns a record. BTW, why would anyone define an adt with only one member; especially for fopen() which has always returned an integer (and probably always will return an integer)? use DBI; use DBD::Oracle; my ($udump, $filename) = ("/usr/local/oracle/admin/V816/udump", "ora_4709.trc"); my ($fh, %sth) = (undef,undef); my $dbh = DBI->connect("dbi:Oracle:", "", ""); $sth{open} = $dbh->prepare("begin :fh := sys.utl_file.fopen(:loc, :file, 'r', 32767); end;"); $sth{open}->bind_param_inout(":fh", \$fh, 20); # this is param that causes the exec to fail $sth{open}->bind_param(":loc", $udump); $sth{open}->bind_param(":file", $filename); $sth{open}->execute; exit 0; ===== Jeff Holt Performance Specialist Hotsos, LLC [EMAIL PROTECTED] 817.821.9553 __________________________________________________ Do You Yahoo!? Get personalized email addresses from Yahoo! Mail http://personal.mail.yahoo.com/