我有一个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";
}
答案 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' );