我想从表中复制单个记录,修改记录中的一些字段并插入到同一个表中。该表有90列。
考虑在一个语句中使用insert..select但是有90列,我需要告诉select查询中的列名。我怎样才能以更好的方式在perldbi中做到这一点。请给我一个例子。
答案 0 :(得分:3)
my $sth = $dbh->prepare('SELECT * FROM my_table where 1=0');
$sth->execute;
my $cols = $sth->{NAME};
然后使用$ cols构建插入...选择使用一些替换函数在select中注入修改。
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...";