Akoya has asked for the wisdom of the Perl Monks concerning the following question:

Why does the following query return the correct value in SQL*Plus (Oracle command-line SQL interface), but returns nothing using the DBI?

SELECT server_id FROM wms_rf_server WHERE server_name = 'splwebdev.unix.us.tld.com'

The Perl code I am using to execute this SQL is:

use strict; use warnings; use DBI qw(:sql_types); my $dbh = DBI->connect('dbi:Oracle:db','user','pass', { AutoCommit => 0, RaiseError => 1, PrintError => 1 } ) or die "Unable to connect!: $!\n"; my $sql = qq{ SELECT server_id FROM wms_rf_server WHERE server_name = 'splwebdev.unix.us.tld.com' }; my $server_id; my $sth = $dbh->prepare($sql); $sth->execute(); my $rv = $sth->bind_columns(\$server_id); print "Returned server_id = [$server_id]\n" if $server_id; $sth->finish(); $dbh->disconnect();

No exceptions are raised, and the program ends normally, without displaying anything. I am new to DBI, so I know that I must be overlooking something simple. Please let me know if you see anything obvious, or give me suggestions for troubleshooting this.

Thanks,
Akoya

Replies are listed 'Best First'.
Re: Why does the same SQL return different results in the DBI and in SQL*Plus?
by jettero (Monsignor) on Jul 06, 2007 at 19:44 UTC

    You have to $sth->fetch at least once... probably once per row...

    print "returned something ($server_id)\n" while $sth->fetch;

    -Paul

      I knew it would be something simple.

      Thanks,
      Akoya.

Re: Why does the same SQL return different results in the DBI and in SQL*Plus?
by jZed (Prior) on Jul 06, 2007 at 20:36 UTC
    Here's what I use for fetching single values (avoids explicit prepare, execute, bind) (update - and fetch and finish):
    my $sql = qq{ SELECT server_id FROM wms_rf_server WHERE server_name = 'splwebdev.unix.us.tld.com' }; my($server_id) = $dbh->selectrow_array($sql);
    The parens are not strictly necessary in this case cause we specified only one column but it's good to get into the habit because without them it's undefined which value you'll get from a multi-column query.

    update 2 duh! I meant selectrow_array not fetchrow_array, thanks runrig