sub fetch_ms_table {
$ms_initial_cnt = 0;
$logger->info("begin fetching TACCTTREE_MS");
$SQL = "select $pk_string,LINK_C,LENGTH_Q,PATHS_Q from TACCTTREE_MS tree1 where OUT_Z>\"$process_time\"";
&execsql($dbp, $SQL);
$cnt = 0;
$cnt1 = 0;
#load the MILESTONE table data
while (@data = $dbp->dbnextrow()) {
$data[0] =~ s/\s+//g;
$taccttree_ms_cache{ $data[0] }{status} = "d"; #default the record as deleted.
$taccttree_ms_cache{ $data[0] }{pk} = $data[0];
$taccttree_ms_cache{ $data[0] }{LINK_C} = $data[1];
$taccttree_ms_cache{ $data[0] }{LENGTH_Q} = $data[2];
$taccttree_ms_cache{ $data[0] }{PATHS_Q} = $data[3];
$ms_initial_cnt++;
}
$logger->info("end fetching taccttree_MS - fetched $ms_initial_cnt rows");
}
выше функция не дает ниже журнал,Недостаточно памяти! в программе Perl
INFO> main::fetch_ms_table begin fetching TACCTTREE_MS
Failed for 'Milestone TACCTTREE table'
Std Err
Out of memory!
SQL, возвращает около 5050402 строк. Одна и та же подпрограмма дважды вызывается из основной программы. В первый раз он проходит через тонкий и второй раз, когда он выходит из строя из-за нехватки памяти
Сколько памяти у вашей системы? Если вы действительно напряжены в памяти, вам придется получать ваши результаты в кусках вместо оптовой торговли. – tadman
Вы используете стандарты Perl 4, которым около двадцати лет. Пожалуйста, добавьте 'use strict' и' use warnings' в начало вашей программы и удалите амперсанд '&' из всех вызовов подпрограмм. – Borodin
Что такое '$ pk_string'? И 'execsql'? – Borodin