代码之家  ›  专栏  ›  技术社区  ›  mradul

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

  •  0
  • mradul  · 技术社区  · 7 年前

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

    上面的代码只返回一行,数组的大小只显示其中的一个元素。

    我需要把五行都取出来,然后一行一行地循环。

    请告诉我这里缺少什么!!

    我正在使用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 回复  |  直到 7 年前
        1
  •  2
  •   Corion    7 年前

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