oracle怎么复制表以及表中数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle怎么复制表以及表中数据相关的知识,希望对你有一定的参考价值。

可用如下方法复制:

如果新表不存在:

比如有一张表叫test,现在要复制表结构及表内数据,可执行代码:

create table test as select * from test;

这样就把表结构连同数据一起复制了。

如果表存在,可用以下代码:

insert into test1 select * from test;
commit;
参考技术A 请检查两个表的字段。
INSERT INTO SELECT语句详解:
语句形式为:Insert into Table2(field1,field2,...) select value1,value2,... from Table1
注意:
(1)要求目标表Table2必须存在,并且字段field,field2...也必须存在
(2)注意Table2的主键约束,如果Table2有主键而且不为空,则 field1, field2...中必须包括主键
(3)注意语法,不要加values,和插入一条数据的sql混了,不要写成:
Insert into Table2(field1,field2,...) values (select value1,value2,... from Table1)
参考技术B ORACLE 10G及之前版本可用EXP(导出) ,IMP(导入),10G及10G可用 EXP_DP(导入),IMP_DP(导入). 参考技术C 你用的命令行,还是客户端?
命令行的话,把搜到的结果直接copy就行了啊。
如果用客户端工具的话,在搜到的结果的边框上点右键。肯定有复制选项啊。我用的PLSQL,有cory to excel.
参考技术D create table T_BAK AS SELECT * FROM T本回答被提问者采纳

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

【中文标题】如何创建 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怎么复制表以及表中数据的主要内容,如果未能解决你的问题,请参考以下文章

oracle中怎么如何把两张表中查询到的数据求和,

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

怎样将一个数据库中表数据复制到另一个数据库表中 举个例 sqlserver数据库

在oracle中怎么把一张表的数据插入到另一张表中

如何将一个数据库中的一个表复制到另一个数据库中的表中

mysql 数据库怎样快速的复制表以及表中的数据