bind_columns вызывается с 1 значением, но необходимо 2
Я пытаюсь понять, почему у меня возникла следующая проблема.
Я пишу небольшой скрипт на Perl, беру несколько примеров здесь и там, добавляя некоторые свои.
Что я делаю, так это храню запросы в файле cfg, извлекаю их в соответствии с переданным аргументом, выполняю и возвращаю значение.
use strict;
use warnings;
...
$comm = 'tablespace_critical'; # In the real script, this is a command-line argument.
...
my $query = "$CFG::CFG{'checks'}{$comm}{'query'}";
# this part was literally copied from another script
# that didn't used the strict and warnings.
#---------------------------------------------------
my $query_handle = $dbh->prepare($query);
my $result;
$query_handle->execute();
$query_handle->bind_columns( \$result);
$result=$query_handle->fetchrow_array();
$query_handle->finish;
$dbh->disconnect();
#---------------------------------------------------
*.Cfg
%CFG = (
'tablespace_critical' => {
'query' => "select x\.tablespace_name,x\.used_pct from (select a\.tablespace_name,((total_space-free_space)/total_space)*100 used_pct from (select tablespace_name,sum(bytes)/(1024*1024) total_space from dba_data_files group by tablespace_name) a, (select tablespace_name,sum(Bytes)/(1024*1024) free_space from dba_free_space group by tablespace_name) b where a\.tablespace_name = b\.tablespace_name(+)) x, mon_control y where x\.tablespace_name = y\.name(+) and y\.monitoring_type (+) = 'TABLESPACE' and x\.used_pct >= decode (y\.err_value,-1,NULL,NULL,90,y\.err_value)"
}
)
В оригинальном сценарии это работало без каких-либо проблем, но здесь я получаю bind_columns called with 1 values but 2 are needed
, В конфиге хранится несколько запросов, и только этот доставляет проблемы. Perl - не мое дело, поэтому у меня все еще есть слабые концепции, над которыми я работаю, но я уже потратил много времени, поэтому надеюсь, что вы мне поможете.
С уважением.
1 ответ
Вы выполняете запрос, который извлекает два значения:
select x.tablespace_name, x.used_pct from ...
^^^ ^^^
1st field 2nd field
Следовательно bind_columns
ожидает, что вы также свяжете два скаляра.
$query_handle->bind_columns( \$result); # <-- only a single variable
Если вы хотите получить переменное количество полей, не беспокойтесь о привязке столбцов, а просто используйте fetchrow_array
:
$query_handle->execute();
my @result = $query_handle->fetchrow_array();