On Friday, September 10, 2010 11:47 AM, Martin J. Evans wrote: > You don't look like you did anything but connect and disconnect. You > are running it on the script you posted originally aren't you? > > Can you try again. Remove the use DBD::ODBC and connect flags I > asked you to add and simply do the set DBI_TRACE=15=x.x. > > Search the log for the SQL you issue - if you don't see some of it > the tracing is still not right.
I did run it against the original script! Here it is once again: #---------------------------------------------------------------- use Modern::Perl; use DBI; use Data::Dump qw(dump); sub handle_error { my ($state, $msg, $native) = @_; say qq{handle_error: \$state is "$state".}; say qq{handle_error: \$msg is "$msg".}; say qq{handle_error: \$native is "$native".}; return 1; } my $dbh = DBI->connect('DBI:ODBC:driver={SQL Server};Server=xxxxx;Database=xxxxx', 'xxxxx', 'xxxxx', {odbc_cursortype => 2, odbc_default_bind_type => DBI::SQL_VARCHAR, odbc_err_handler => \&handle_error, RaiseError => 1, PrintError => 0, }); # Enable tracing DBI->trace(DBD::ODBC->parse_trace_flags('odbcconnection|odbcunicode')); my $sth = $dbh->prepare('{? = call error_test(?, ?)}'); # Set up parameters my $retval; my $p1 = 'Some input parameter'; my $p2 = 75; $sth->bind_param_inout(1, \$retval, 4000, DBI::SQL_VARCHAR); $sth->bind_param (2, $p1, DBI::SQL_VARCHAR); $sth->bind_param_inout(3, \$p2, 32, DBI::SQL_INTEGER); $sth->execute; $_ = defined($_)? qq{"$_"} : '{NULL}' for ($retval, $p1, $p2); say qq{After execute: \$retval is $retval.}; say qq{After execute: \$p1 is $p1.}; say qq{After execute: \$p2 is $p2.}; say 'Done.'; #---------------------------------------------------------------- Then I set DBI_TRACE=15=dt_trace.out in the cmd.exe shell and ran it. Most puzzling. Output was: After execute: $retval is {NULL}. After execute: $p1 is "Some input parameter". After execute: $p2 is "75". Done. -- Eric