Perl DBI вставить и выбрать - PullRequest
2 голосов
/ 08 марта 2012

Я хочу скопировать одну запись из таблицы, изменить некоторые поля в записи и вставить в ту же таблицу. Таблица имеет 90 столбцов.

Мысль об использовании insert..select в одной инструкции, но есть 90 столбцов, и мне нужно указать имя столбца в запросе выбора Как я могу сделать это лучше в perldbi. Пожалуйста, предоставьте мне пример.

1 Ответ

3 голосов
/ 08 марта 2012

Извлечение и кеширование имен столбцов для вашей таблицы с использованием атрибута оператора NAME

my $sth = $dbh->prepare('SELECT * FROM my_table where 1=0');
$sth->execute;
my $cols = $sth->{NAME};

, затем использование $ cols для создания вставки ... выберите, используя некоторую функцию замены для внедренияВаши модификации в избранном.

my %mods_for_column = ( 'foo' => 'foo+10', 'bar' => 'trim(bar)' );
my $inscols = join(',', @$cols);
my $selcols = join(',', 
  map { exists($mods_for_column($_)) ? $mods_for_column($_) : $_ } @$cols
);
my $sql = "insert into my_table ($inscols) select $selcols from my_table where mumble...";
...