使用PERL脚本获取ORACLE SQL查询的所有行

时间:2019-02-15 06:00:31

标签: oracle perl

我需要从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";
}

1 个答案:

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