如何使用perl将表插入另一个数据库?

时间:2016-10-27 06:54:59

标签: perl dbi

1.我有两个数据库(即database_1m和database_current)

2.我在include_status表中插入了一些列(即在database_1m中)。我想在database_current中插入相同的表。

3.每个数据库在database_1m中都有时间字段我将获得所有时间但在第二个数据库中我只需要最近的时间行,所以我使用mysql查询来获取最近更新的时间行(即select from from include_status where time =(从include_status中选择max(时间));)

4.在这里,我不知道如何使用perl在同一个子程序中使用这两个数据库? 代码:

sub data
{

    $DBH = &connect or die "Cannot connect to the sql server \n";
    $DBH->do("USE database_1m;");
    $stmt = "INSERT INTO include_status(time,available,closed,used,busy,reserved,down) VALUES(\"$current_time\",\"$include{'D'}\",\"$include{'B'}\",\"$include{'A'}\",\"$include{'C'}\",\"$include{'R'}\",\"$include{'+'}\")";


            my $sth = $DBH->prepare( $stmt );
            $sth->execute() or print "Could not insert data";
    $sth->finish;
    $DBH->disconnect();




}

Mysql查询:(插入最近更新的行)

 select * from include_status where time=(select max(time) from include_status);

2 个答案:

答案 0 :(得分:1)

您需要“INSERT ... INTO ... SELECT ...”,它允许您运行选择查询并将结果直接插入另一个表中。如果这两个表位于同一服务器上的不同数据库中,那么您应该能够在一个语句中直接执行。类似的东西:

INSERT
INTO database_current.insert_status
SELECT *
FROM database_1m.insert_status
WHERE [some where clause]

我将重申我提出last time this code was posted的一些观点。

  1. 请不要使用&调用子程序。它会在某些时候让你感到困惑。请改用connect()。
  2. 您未向我声明$DBH这一事实让我想知道您的代码中是否有use strict。您应始终加入use strictuse warnings

答案 1 :(得分:0)

插入将是这样的:

my $stmt = "INSERT 
            INTO destination_table(time,available,closed,used,busy,reserved,down)
            SELECT time,available,closed,used,busy,reserved,down from original_table";