Я использую Perl DBD :: ODBC для подключения к базе данных Informix, к которой я ранее был слеп к схеме. Я успешно открыл схему с помощью запросов таблиц tabname и colname. Теперь я повторяю каждую из этих таблиц, извлекая все в них для загрузки в другую модель. То, что я нахожу, это то, что нулевые столбцы выходят из запроса select. Например. если таблица выглядит следующим образом, с необязательно нулевым lastseen
колонке (любого типа данных):Выбор всех строк из таблицы Informix, содержащей несколько нулевых столбцов
ID username lastseen
-- -------- --------
1 joe 1234567890
2 bob 1098765432
3 mary
4 jane 1246803579
затем select * from mytable
(или с указанием всех имен столбцов indiidually) останавливается на мэри подряд.
у меня эту работу с помощью NVL следующим образом:
select nvl(id, ''), nvl(username, ''), nvl(lastseen, '') from mytable
И это хорошо, но мой вопрос: есть ли более простой синтаксис Informix, чтобы обнуляет прийти в мой результирующий набор , что-то простое, как NULLS OK
или что-то, что мне не хватает? В качестве альтернативы, может использоваться некоторая опция дескриптора базы данных?
Вот пример моего Perl с NVL() взломать, в случае, если оно соответствует:
my %tables = (
users => [
qw(id username lastseen)
]
);
foreach my $tbl (sort keys %tables) {
my $sql = 'select ' . join(',', map { "nvl($_, '')" } @{$tables{$tbl}}) . " from $tbl";
# sql like: select nvl(a, ''), nvl(b, ''), ...
my $sth = $dbh->prepare($sql);
$sth->execute;
while(defined(my $row = $sth->fetchrow_arrayref)) {
# do ETL stuff with $row
}
}
Это действительно не обязательно. Конечно, DBD :: Informix правильно обрабатывает значения NULL - есть ли веская причина, по которой вы не можете использовать этот драйвер, а не ODBC? – RET
Полу-хорошее, просто я в очень большой и параноидальной корпоративной среде, и на самом деле это огромная боль, чтобы установить новые модули, возможно, не стоит усилий для этого ограниченного приложения, так как у меня есть обходной путь. У нас есть другие решения, аналогично использующие ODBC для абстрагирования слоя базы данных, поэтому я, конечно же, буду заинтересован в изучении его ограничений и причуд, если это действительно виновник (и я очень хочу поверить, что это так). – swornabsent