Perl DBI插入并选择

时间:2012-03-08 01:02:25

标签: perl dbi

我想从表中复制单个记录,修改记录中的一些字段并插入到同一个表中。该表有90列。

考虑在一个语句中使用insert..select但是有90列,我需要告诉select查询中的列名。我怎样才能以更好的方式在perldbi中做到这一点。请给我一个例子。

1 个答案:

答案 0 :(得分:3)

使用NAME statement attribute

获取并缓存表格的列名称
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...";