我需要从oracle sql查询中获取所有行,然后使用PERL遍历每行。
下面是一些示例数据和表格
create table t1 (col1 varchar2(30));
insert into t1 values ('row1');
insert into t1 values ('row2');
insert into t1 values ('row3');
insert into t1 values ('row4');
insert into t1 values ('row5');
commit;
我已经编写了如下所示的PERL脚本以获取上表-
# connexion a la base
my $dbh = DBI->connect( 'dbi:Oracle:'.$dbname,
$dbusername,
$pass,
{ PrintError => 0,
RaiseError => 1
}
) || die "Erreur lors de la connexion: $DBI::errstr";
print ("Connexion à la base de données $dbname avec $dbusername OK \n");
$requete = "select col1 from t1";
$sth_sql = $dbh->prepare($requete);
$sth_sql->execute(@row);
@row=$sth_sql->fetchrow_array;
my $size = @row;
print $size;
#$first=@row[0];
#$sec=@row[1];
print $sec;
print $first;
foreach $script_name (@row) {
print "$script_name\n";
}
上面的代码仅返回一行,并且数组的大小仅显示其中的1个元素。
我需要获取所有5行,然后一个接一个地循环遍历。
请提出我在这里想念的东西!
我正在使用oracle数据库。
谢谢
编辑:
我进行了一些更改,现在可以正常使用
$requete = "select col1 from t1";
$sth_sql = $dbh->prepare($requete);
$sth_sql->execute();
#@row=$sth_sql->fetchrow_array;
$sth_sql->bind_columns(undef, \$script_name);
print $sec;
print $first;
while ($sth_sql->fetch()) {
$script_sql=$script_name.".sql";
print "$script_sql\n";
}
答案 0 :(得分:2)
->fetchrow_array
函数记录在DBI中。在那里,您将看到记录,可以在循环中使用它:
$sth = $dbh->prepare("SELECT foo, bar FROM table WHERE baz=?");
$sth->execute( $baz );
while ( @row = $sth->fetchrow_array ) {
print "@row\n";
}
按顺序检索所有行,或者可以使用->fetchall_arrayref
方法一次检索完整的结果集:
$sth = $dbh->prepare("SELECT foo, bar FROM table WHERE baz=?");
$sth->execute( $baz );
my $rows = $sth->fetchall_arrayref;
for my $row (@$rows) {
print "@row\n";
}