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

时间:2012-07-23 12:38:57

标签: database perl plsql plsqldeveloper

我有一个Perl脚本,它将文件作为输入,并在其中包含PL / SQL(用于语句和DBMS_OUTPUT.PUT_LINE)。我需要运行建立数据库连接并在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";
}

1 个答案:

答案 0 :(得分:3)

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

如果您使用DBMS_OUTPUT.PUT_LINE输出结果,则需要使用dbms_output_* functions provided by DBD::Oracle

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' );