Как правильно представлять пробелы в DBI Perl

У меня есть запись в таблице Informix. Столбцы таблицы выглядят так:

acct_no integer,
suffix char(1),
meter_num char(20),
date_read datetime year to second not null ,
counter smallint,
reading integer not null ,
typeofread char(1),
estimated char(1),
time_billed datetime year to second

Используя инструмент Informix dbaccess:

select * 
from ws_mtrread 
where acct_no = 113091000 
and suffix = " " 
order by date_read desc;

этот результат (показан новейшим) возвращается и работает независимо от того, использую ли я один или два пробела для суффикса.

acct_no      113091000
suffix
meter_num    34153205
date_read    2013-09-09 23:31:15
counter      0
reading      1240
typeofread   g
estimated
time_billed  2013-10-22 11:48:21

Тем не менее, этот запрос Perl DBI

my $sql_statement = 
"select * ".
"from ws_mtrread ".
"where acct_no = ? ".
"and suffix = ? ".
"order by date_read desc ; ";

не работает. Я могу получить строку без указания суффикса $, поэтому я знаю, что строка существует.

Я считаю, что это ошибка с моей стороны в представлении суффикса. В этом примере суффикс равен строке из двух пробелов.

Как правильно представить пробелы, чтобы запрос работал? Вот остаток кода, который я использовал для извлечения строки.

my $test_acct_no = 113091000;
my $suffix = "  ";

my $pt_sel_hdl = $DBHdl->prepare($sql_statement);

$pt_sel_hdl->execute($test_acct_no, $DBHdl->quote($suffix));

my $ws_mtr_read_rec_ref = $pt_sel_hdl->fetchrow_hashref;

После вызова $ws_mtr_read_rec_ref не определено.

1 ответ

Решение

Не используйте DBI quote метод здесь:

$pt_sel_hdl->execute($test_acct_no, $DBHdl->quote($suffix));

Когда вы используете ? заполнители в вашем SQL, драйвер базы данных будет правильно параметризировать аргументы запроса, которые вы передаете execute, Вы, вероятно, создаете запрос, который ищет буквенную строку " " (включая кавычки), когда вы хотите найти (только два пробела.)

Так что это должно быть все, что вам нужно:

$pt_sel_hdl->execute($test_acct_no, $suffix);
Другие вопросы по тегам