Получить все строки SQL-запроса ORACLE, используя скрипт Perl - PullRequest
0 голосов
/ 15 февраля 2019

Мне нужно получить все строки из SQL-запроса oracle, а затем перебрать все строки с помощью 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 элемент.

Мне нужно выбрать все пятьстроки, а затем перебирайте их по очереди.

, пожалуйста, предложите, что мне здесь не хватает !!

Я использую базу данных 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 голосов
/ 15 февраля 2019

Функция ->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";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...