Perl DBI: Вставить целую ha sh за один вызов, как дополнение к fetchall_hashref () - PullRequest
1 голос
/ 27 мая 2020

Я использую 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 (), мне нужно было бы разделить все значения в каждом столбце в отдельный массив. Спасибо за умную идею; Я могу использовать это когда-нибудь. Но настроить это - еще более уродливая установка, чем я уже делаю.

...