将数据从一个表复制到另一个表-Oracle

时间:2018-09-13 09:01:11

标签: c# oracle

我正在使用Oracle.ManagedDataAccess从C#连接到Oracle DB。

我需要:

  1. 连接到架构A,从表T中读取所有行,并将所有行插入到架构X中的表T中。
  2. 连接到模式B,从表T中读取所有行,并将它们全部插入到模式X中的表T中。
  3. 连接到架构C,从表T中读取所有行,并将它们全部插入到架构X中的表T中。

基本上,我需要将3种不同模式(每个使用不同的凭据)中的表中的所有数据复制到第四种模式中的一个表中。我不需要在从架构A / B / C读取数据并将其插入X之间进行修改的数据-只是一个直接副本。所有4个表都具有相同的结构(DDL)。

我当时正在考虑使用3个数据集作为中间步骤,但是也许可以更容易地做到这一点?

1 个答案:

答案 0 :(得分:1)

这可以完全在数据库中完成,而无需通过外部应用程序。

从具有适当权限的用户授予ABC的权限:

GRANT SELECT ON A.T TO X;
GRANT SELECT ON B.T TO X;
GRANT SELECT ON C.T TO X;

来自用户X

INSERT INTO X.T
SELECT * FROM A.T;

INSERT INTO X.T
SELECT * FROM B.T;

INSERT INTO X.T
SELECT * FROM C.T;

或作为单个语句:

INSERT INTO X.T
SELECT * FROM A.T UNION ALL
SELECT * FROM B.T UNION ALL
SELECT * FROM C.T;

从具有适当权限的第一个用户开始:

REVOKE SELECT ON A.T FROM X;
REVOKE SELECT ON B.T FROM X;
REVOKE SELECT ON C.T FROM X;