SO.Perl DBI - Использование неинициализированного значения
Я запрашиваю базу данных Oracle из Perl-скрипта, используя Perl-интерфейс DBI. Я возвращаю возвращаемые строки, используя fetchrow_hashref (так как мне понадобится имя столбца позже). Я помещаю каждый из возвращенных строк в массив и возвращаю ссылку на этот массив. Поэтому в основном я возвращаю ссылку на массив ссылок на хеши. Что-то вроде этого:
my $sth = $dbh->prepare($query);
$sth->execute();
# Fetch all rows returned as hash references and put each of those
# references into the array @rows
@returned_rows =();
while ($row = $sth->fetchrow_hashref()) {
push(@returned_rows, $row);
}
# Return a reference to the array @rows
# Return a reference to an array of hash references
return \@returned_rows;
Если один из полей приходит как нуль, я получаю:
Use of uninitialized value in concatenation (.) or string at sqlesl.pl line 49.
Что нормально, потому что я ожидал нулевых значений из базы данных, но даже если я проверить UNDEF , Я получаю ту же ошибку, которая заставляет меня думать, что все не так, как говорят DBI, должно быть:
Альтернатива fetchrow_arrayref. Выбирает следующую строку данных и возвращает ее как ссылку на хэш, содержащий имя поля и поле пары значений. Нулевые поля возвращаются как значения undef в хэше.
Это часть кода, которую я использовал для проверки фрагмента выше. Предположим, что * $ rows_ref * - это то, что возвращает вышеприведенный фрагмент.
@rows = @$rows_ref;
$hash_ref = $rows[0];
%hash = %$hash_ref;
@keys = keys %hash;
foreach $key (@keys) {
next if (undef($hash{$key}));
print "$key: $hash{$key}\n";
}
У кого-то есть некоторый свет для пролить на этот?
Заранее спасибо.
Обратите внимание, что вы можете назвать '$ sth-> fetchall_arrayref ({})', чтобы получить ссылку на массив из hashref строк, так что вам не нужно заполнить '@returned_rows 'yourself – stevenl