Ошибка SQL в модуле DBI в Perl - PullRequest
       6

Ошибка SQL в модуле DBI в Perl

1 голос
/ 07 апреля 2011


Я не получил никакого вывода, когда я запускаю этот запрос. Я не смог понять это. Может кто-нибудь, пожалуйста, помогите мне. в этом случае $ lastfiscyear = 09/10.

getitem44();  
sub getitem44()  
{  
$sqlquery = sprintf("select sum(f.expenditure)          
                     from funds f,ledger l      
                     where l.ledger_id in (select ledger_id from ledger  
                                           where upper(ledger_name) like 'MONOACQ%' and  
                                           substr(ledger_name,length(ledger_name)-4, 5) = '%s') and  
                                  f.ledger_id = l.ledger_id and  
                                  substr(f.funds_name, 1, instr(f.funds_name,',')-1) like '%e' ", $lastfiscyear);    
$sth = $dbh->prepare($sqlquery);  
$rc = $sth->execute;  
my $total = $sth->fetchrow_array;  
print "$total\n";  
}

Ответы [ 2 ]

5 голосов
/ 08 апреля 2011

Вам нужно экранировать %e с дополнительным знаком процента, потому что в противном случае sprintf интерпретирует его как спецификатор преобразования (число с плавающей запятой в научной нотации).

sprintf "select sum(f.expenditure) ... like '%%e' ", $lastfiscyear;

См. perldoc sprintf для деталей.

1 голос
/ 08 апреля 2011

Обратите внимание, что sprintf будет использовать знак % для заполнителей. Если вы хотите поместить дословно % в строку, удвойте ее. Я думаю, что проблема %e близка к концу - она ​​заменяется на 0.000000e+000.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...