2016-05-16 20 views
0

PerlスクリプトからOracle DBに接続し、その出力をフェッチしようとしています。Oracle DB文の実行に失敗しました

SQL> select * from DIT_NOFUTURE_TMP1 where rownum < 5; 

ORDER_ID ORDER_UNIT CUSTOMER_ID 
---------- ---------- -------------- 
2534  2535  100000046 
2560  2561  100000109 
2523  2524  100000045 
2525  2526  100000045 

受け取った出力::私は以下のコード

#!/usr/local/bin/perl 

use DBI; 
use warnings; 
use strict; 

sub retrieve_data { 
    my ($dbh, $rwnum) = @_; 
    my @row; 
    my $selstmt = $dbh->prepare("select * from DIT_NOFUTURE_TMP1 where rownum < 5") 
      or die "Can't prepare SQL statement: ", $dbh->errstr(), "\n"; 
    $selstmt->execute($rwnum); 
    while (@row = $selstmt->fetchrow_array) { # retrieve one row 
     print join(", ", @row), "\n"; 
    } 
} 

my $dsn = "dbi:Oracle:DBInstance"; 
my $dbh = DBI->connect($dsn, 'username', 'password', { AutoCommit => 0 }); 
my $rno = 5; 

unless ($dbh) { 
    print "\nError : DBI connect failed: DBI:errstr\n"; 
    print "Error : Unable to connect to database $dsn\n"; 
    exit(-1); 
} 

retrieve_data $dbh , $rno; 

exit(0); 

予想される出力に書いた

DBD::Oracle::st execute failed: called with 1 bind variables when 0 are needed [for Statement "select * from DIT_NOFUTURE_TMP1 where rownum<5"] at dbcon.pl line 13. 
DBD::Oracle::st fetchrow_array failed: ERROR no statement executing (perhaps you need to call execute first) [for Statement "select * from DIT_NOFUTURE_TMP1 where rownum<5"] at dbcon.pl line 14. 
Issuing rollback() due to DESTROY without explicit disconnect() of DBD::Oracle::db handle (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=135.208.32.97)(PORT= 1521))(CONNECT_DATA =(SERVER=DEDICATED)(SERVICE_NAME=PRDMOMS))) at dbcon.pl line 36. 

を、このためのいくつかのソリューションを提案してください。

答えて

5

エラーが示すように、ステートメントハンドルは引数を必要としません(クエリにプレースホルダがないため)。

番号5は、単にパラメータを削除し、そうでない場合

my $selstmt = $dbh->prepare('select * from DIT_NOFUTURE_TMP1 where rownum < ?') 
    or die "Can't prepare SQL statement: ", $dbh->errstr(), "\n"; 

にクエリを変更し、パラメータに置き換えることになっている場合:

$selstmt->execute; 
+0

私は、パラメータとその作業罰金を取り外してみました...ありがとうございました –

関連する問題