2011-07-15 10 views
1

私はoracleのためにdbiでperlを使う方法を学んでいます。私は単に出力をテストしようとしていますが、この単純な選択から結果をプリントアウトすることはできません。perlのdbiコードから出力を得るのを助ける

誰かがこれを理解するのを助けたり、私にこれを書く良い方法を示すことができたら、私は感謝します。ありがとう。

use strict; 
use File::Basename; 
use DBI; 
use Time::localtime; 
use POSIX qw/uname/; 

use vars qw/$dbh $scr $computer_name/; 
$scr = basename($0, ''); 
$computer_name = (uname())[1]; 

$dbh = DBI->connect('dbi:Oracle:testdb', 'test', 'test', 
        {RaiseError => 0, PrintError => 0, AutoCommit => 0}) || 
     die "$scr: connect error on $computer_name [$DBI::errstr]"; 

my $out = get_val(); 
print "The date is $out\n"; 
$dbh->disconnect; 

sub get_val 
{ 
    my $sth = $dbh->prepare(q{ 
     SELECT sysdate 
     FROM dual}) || 
     die "$scr: prepare error on $computer_name [$DBI::errstr]"; 
    $sth->execute; 
    my $row = $sth->fetchrow_hashref; 
    $sth->finish; 
    return $row->{VALUE}; 
    } 

答えて

1

fetchrow_hashrefが返すハッシュのキーは列名です。クエリの列ではない、返されたハッシュリファレンスからキー 'VALUE'を取得しています。

+0

ありがとう、その偶数の大文字と小文字を区別します。それは大文字でなければならなかった。私は 'SYSDATE'を入れなければなりませんでした。 – jdamae

0

fetchrow_hashref()は、各列をハッシュのキーとして返します。 return文は次のようにする必要があります。

return $row->{sysdate};