在Perl脚本中运行PL/SQL过程



我有一个Perl脚本,它以一个文件为输入,其中有PL/SQL(用于语句和DBMS_OUTPUT.PUT_LINE)。我需要运行make数据库连接,并用Perl脚本运行该文件。pl/sql有Begin声明结束部分,上面有for语句,这些语句正在写入用逗号分隔的3列数据(DBMS_OUTPUT.PUT_LINE)。这是正确的吗?

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";
}

$sth->fetch()$sth->fetchrow_*()和好友都从结果集中获取记录。在Oracle中,PL/SQL块通常不会返回结果集。因此,在运行PL/SQL块之后调用$sth->fetchrow_array()不会返回任何结果。

如果使用DBMS_OUTPUT.PUT_LINE输出结果,则需要使用DBD::Oracle提供的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' );

相关内容

  • 没有找到相关文章

最新更新