将数据从一个数据库复制到另一个数据库

时间:2016-04-06 08:51:04

标签: sql perl perl-module perl-data-structures

我正在编写一个perl脚本,它将DB1中存在的几个表中的数据复制到DB2中的表中。 我在DB3中有一个表,其中包含DB2中每个表的插入查询。

下面是一个表的例如查询。

Insert into ACTION_BLOCK
 (ACTION_BLOCK_ID, RULE_EXPR_ID, ACTION_BLOCK_ORDER)
 Values();

我想到实现以下逻辑

  1. 从DB1读取数据以获取表并将结果加载到散列。
  2. 对于哈希中的每个元素
    • 将插入查询中的values()关键字替换为值('哈希数据')
    • 在DB2中执行插入查询。
  3. 但DB中的数据也可能包含日期。在这种情况下,我无法使用values()直接替换查询中的values('data in hash')关键字,因为我需要提及日期格式(如值后的dd\mm\yyyy)。 任何人都可以帮助我克服这一挑战。

    为了更清楚地考虑下面的例如:

      

    DB1DB2有一个名为ACTION_BLOCK的表格。我需要将DB1_ACTION_BLOCK表中的数据复制到DB2_ACTION_BLOCK表。

    根据我的逻辑,我从ACTION_BLOCK选择DB3表的插入查询,如下所示。

    Insert into ACTION_BLOCK
     (ACTION_BLOCK_ID, RULE_EXPR_ID,RULE_DATE,ACTION_BLOCK_ORDER)
     Values();  
    

    在上面的查询中,我替换了" values()"我从DB1获得的数据的关键字如下所示:

    values(01,02,02/02/2016,09);  
    

    由于日期格式不正确,这会引发错误。理想情况下,它应如下所示:

    values(01,02,to_date('02/02/2016','mm/dd/yyyy'),09);
    

    但是,包含来自DB1的数据的哈希将只包含没有to_date关键字和格式的日期。

    我希望这个例子清楚地描述了这个问题。

1 个答案:

答案 0 :(得分:0)

在纯SQL中,您只需编写:

INSERT INTO DB2.dbo.ACTION_BLOCK
select * from DB1.dbo.ACTION_BLOCK

将它包装在Perl中,Bob就是你的叔叔!