2

入力としてファイルを取り、その中にPL/SQL(ステートメントとDBMS_OUTPUT.PUT_LINE)を含むPerlスクリプトがあります。データベース接続を実行し、そのファイルを Perl スクリプトで実行する必要があります。pl/sql には、コンマ (DBMS_OUTPUT.PUT_LINE) を使用して区切られた 3 つの列のデータを書き込む for ステートメントを使用して、開始宣言終了セクションがあります。私は以下を試しました。それが正しいか?

my $dbh = DBI->connect( "dbi:Oracle:$db", $username, $passwd ) ||
        die( $DBI::errstr . "\n" );
$dbh->{AutoCommit} = 0;
$dbh->{PrintError} = 1;

open FILE, $sql_file or die "Could not open file";

$query = '';
while($line = <FILE>) {
    chomp($line);
    $query .= $line;
}

my $sth = $dbh->prepare($query);

$sth->execute();

while ( my @row = $sth->fetchrow_array() ) {
    foreach (@row) {
        print "$_";
    }
    print "\n";
}
4

1 に答える 1

4

$sth->fetch()$sth->fetchrow_*()、および友人はすべて、結果セットからレコードをフェッチします。Oracle PL/SQL ブロックでは、通常、結果セットは返されません。したがって$sth->fetchrow_array()、PL/SQL ブロックを実行した後に呼び出すと、結果は返されません。

結果を出力するために使用する場合は、 DBD::Oracle が提供する関数DBMS_OUTPUT.PUT_LINEを使用する必要があります。dbms_output_*

my $dbms_output_byte_limit = 1000000;
$dbh->func( $dbms_output_byte_limit, 'dbms_output_enable' );

my $sth = $dbh->prepare($query);
$sth->execute();

my @text = $dbh->func( 'dbms_output_get' );
于 2012-07-23T16:02:44.977 に答える