Perl DBI插入和选择

Perl DBI插入和选择,perl,dbi,Perl,Dbi,我想从表中复制一条记录,修改记录中的一些字段,然后插入到同一个表中。该表有90列 考虑在一条语句中使用insert..select,但是有90列,我需要在select查询中告诉列名称。我怎样才能在perldbi做得更好。请给我举个例子 使用 然后使用$cols构造插入…选择使用一些替换函数将修改插入选择中 my %mods_for_column = ( 'foo' => 'foo+10', 'bar' => 'trim(bar)' ); my $inscols = join(',',

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


考虑在一条语句中使用insert..select,但是有90列,我需要在select查询中告诉列名称。我怎样才能在perldbi做得更好。请给我举个例子

使用

然后使用$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...";

这应该是
$mods\u for_column{$\u}
,而不是
mods\u for_column($)
。里面藏着一只讨厌的虫子。如果列的
%mods\u包含
baz=>0
,该怎么办?最好使用
存在
而不是检查真相。非常感谢您提供的信息。我希望将foo替换为0。“foo'=>“0”。foo是表中的数字字段。当我在映射中为零时,它就不起作用了。@davorg:这就是我不用尝试就键入代码的结果:(我编辑了包含您的建议的示例。@Arav:替换哈希中的'foo'=>0的问题是perl中自由的真/假求值以及我最初使用的| |。新示例使用exists()取而代之,并将允许您指定一个错误的替换值。“新示例使用exists()”。无法理解。请粘贴一个示例代码
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...";