2015-03-09 2 views
1

Я использую Perl DBI/PostgreSQL, и я хочу получить минимальное значение в столбце, но я получаю «Использование неинициализированного значения $ id в конкатенации (.) Или сообщении строки для следующий код:Perl DBI/PostgreSQL min function

my $id = 0; 
$sth = $dbh->prepare(" 
    select min(col_id) 
    from table 
    where col_num = x 
") or die $dbh->errstr; 
$sth->execute() or die $dbh->errstr; 
while (my $results = $sth->fetchrow_hashref) { 
    $id = $results->{col_id}; 
} 
print "$id"; 

Он работает в редакторе PostGreSQL, но не в Perl. Любая помощь будет оценена!

ответ

2

Ваша проблема в том, что в вашем результирующем наборе нет столбца col_id. Вы вычисляете min(col_id), так что $results будет иметь ключ min, а не col_id ключ. Вы хотите сказать:

$id = $results->{min}; 

для извлечения стоимости, которую вы ищете. Или вы можете добавить псевдоним в ваш SELECT:

$sth = $dbh->prepare(" 
    select min(col_id) as min_col_id 
    from table 
    where col_num = x 
") or die $dbh->errstr; 

и использовать это имя при взгляде на $results:

$id = $results->{min_col_id}; 
+0

Спасибо !!!! оно работает ;-) – santunez