如何创建 oracle 程序以将数据导出到历史表中?

Posted

技术标签:

【中文标题】如何创建 oracle 程序以将数据导出到历史表中?【英文标题】:How to create oracle procedure to export data into history tables? 【发布时间】:2013-02-04 13:50:12 【问题描述】:

在 Oracle 数据库中,我们创建了 22 个物化视图,并创建了一个过程来刷新所有这些 MV。 22个物化视图全部刷新成功。

在每个月的最后一天,我们想刷新物化视图并将数据复制到历史表中。这些历史表具有相同的结构以及三个额外的列,其中包含数据的复制日期以及数据所代表的月份和年份。

copy_date 将是数据复制到历史表时的sysdate monthyear 将被传递给存储过程。

例如,如果我在 1 月底忘记刷新并记得在 2 月 4 日

copy_date: 2 月 4 日 “月”和“年”分别是:2012 年 2 月和 2012 年

报告团队将使用这些列来过滤数据以进行分析。

示例:表 A

study country state
abc    india    ap
bcd    china    xx

我需要一个将数据复制到历史表的过程,例如:

month year copy_date     study  country state
jan   2013 01-01-2013    abc    india   ap

当我运行此过程时,我想输入 monthyear 参数的值(在本例中为 jan 和 2013)。

【问题讨论】:

你试过什么?你是在要求别人为你做这项工作。发布一些工作代码,然后您将使用该代码作为开始获得一些帮助。查看metaSO question 和Jon Skeet: Coding Blog,了解如何写作并提出一个好问题。 为什么要创建表的过程?据推测,每个物化视图都会有一个历史表。该历史表将由单个脚本创建一次。然后,您每月运行的过程只需将数据从物化视图复制到现有历史表中。 @Justin:是的,历史表已创建。但我需要将数据从主表复制到历史表的过程,如上所述。请帮忙。 【参考方案1】:

首先,我不知道您为什么要麻烦传入monthyear 参数,而不是简单地从sysdate 派生。在您的示例中,无论您复制 1 月 30 日还是 2 月 4 日的数据,monthyear 都基于当前的 sysdate

一个选项是

CREATE OR REPLACE PROCEDURE copy_a( p_month IN VARCHAR2, p_year IN NUMBER )
AS
BEGIN
  INSERT INTO a_history( month, year, copy_date, study, country, state )
    SELECT p_month, p_year, sysdate, study, country, state
      FROM a;
END;

您还可以使用动态 SQL 来避免创建 22 个单独的存储过程。如果历史表总是将monthyearcopy_date 作为它们的前三列,并且其余列的顺序与基表完全相同

CREATE OR REPLACE PROCEDURE copy_table( p_table_name IN VARCHAR2, 
                                        p_month IN VARCHAR2, 
                                        p_year IN NUMBER )
AS
  l_sql_stmt VARCHAR2(10000);
BEGIN
  l_sql_stmt := 'INSERT INTO ' || p_table_name || '_hist ' ||
                ' SELECT :mnth, :yr, sysdate, a.* ' ||
                '   FROM ' || p_table_name;
  EXECUTE IMMEDIATE l_sql_stmt 
    USING p_month, p_year;
END;

【讨论】:

以上是关于如何创建 oracle 程序以将数据导出到历史表中?的主要内容,如果未能解决你的问题,请参考以下文章

如何把数据库里的数据导出到EXcl表中

如何将excel文件导入到一个oracle表中?谢谢

Oracle:创建存储过程以将另一个存储过程的结果插入表中

记一次从oracle到hive的历史数据迁移

oracle 中如何将一张500万数据的表从一个库快速转移到另外一个库

如何使用plsql导出oracle数据建表语句,存储过程,视图.以及表中数据