Я использую Perl DBI с DBD :: Informix, но подозреваю, что точная база данных не важна для этого вопроса. Итог: я ищу метод массовой вставки, в котором я могу вставить содержимое ha sh [хешей] в таблицу за один вызов.
Комментарий:
Я влюбился в метод Perl DBI fetchall_hashref()
, в котором я могу запустить запрос и получить весь благословенный активный набор - который может состоять из тысяч строк - в ha sh за один вызов.
Я просматриваю POD обоих этих модулей в поисках эквивалента этого в операторе вставки или вызове PUT, что-то вроде метода putall_hashref (). Лучшее, что я нашел, - это простая однострочная вставка, где я ПОДГОТОВИЛ оператор INSERT с помощью? заполнители, а затем выполните ПОДГОТОВЛЕННЫЙ stament. Я использовал курсор PUT, доступный в ESQL / C (и Informix-4GL), но даже они по-прежнему представляют собой одну строку за раз.
Мне нужен метод массовой вставки.
Где-нибудь есть такой метод, но я его пропустил?
Я вижу комментарии Шона и zdim.
Shawn & zdim,
Пример текущего (непроверенного ) кода, хотя я использовал аналогичные вещи раньше:
$db_partns = $extract_smi_p->fetchall_hashref("partition");
# Pulls from temp tab in DB1
...
Теперь l oop, чтобы вставить каждую строку сверху ha sh в новую временную таблицу в другая БД
for my $partn (keys %$db_partns)
{
$put_statement_p->execute(@{$db_partns->{$partn}}{@partn_fields});
}
Примечание: @partn_fields - это массив ключей, т.е. имен столбцов. (Используя схему ha sh -slice.)
Чтобы использовать execute_array (), мне нужно было бы разделить все значения в каждом столбце в отдельный массив. Спасибо за умную идею; Я могу использовать это когда-нибудь. Но настроить это - еще более уродливая установка, чем я уже делаю.