Копировать данные из одной таблицы в другую - Oracle - PullRequest
0 голосов
/ 13 сентября 2018

Я использую Oracle.ManagedDataAccess для подключения к БД Oracle из C #.

Мне нужно:

  1. подключиться к схеме A, прочитать все строки из таблицы T и вставить все их в таблицу T в схеме X
  2. подключиться к схеме B, прочитать все строки из таблицы T и вставить все их в таблицу T в схеме X
  3. подключиться к схеме C, прочитать все строки из таблицы T и вставить все их в таблицу T в схеме X

В основном мне нужно скопировать все данные из таблиц в 3 разных схемах (каждая из которых использует разные учетные данные) в одну таблицу в четвертой схеме. Мне не нужно изменять данные между чтением из схемы A / B / C и вставкой их в X - просто прямая копия. Все 4 таблицы имеют одинаковую структуру (DDL).

Я думал об использовании трех наборов данных в качестве промежуточного шага, но, возможно, это можно сделать проще?

1 Ответ

0 голосов
/ 13 сентября 2018

Это можно сделать полностью внутри базы данных и не нужно проходить через внешнее приложение.

От пользователя (ей) с соответствующими разрешениями на предоставление разрешений для A, B и C:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...