あるテーブルから別のテーブルへのデータのインポート
A表からエクスポートしたdmpファイルをB表にどうインポートするかという質問を偶然見かけましたが、一見、確かにだめのようですが、実は方法があります.まずテスト環境を作りましょう.
SQL> create table t_a as select * from tab;
Table created.
SQL> create table t_b as select * from tab where rownum < 1;
Table created.
ミッションはT_AテーブルからエクスポートされたレコードをT_にインポートB表にあるので、SYSTEMユーザーに同義語を作りました.
SQL> create synonym t_a for mydul.t_b;
Synonym created.
次のエクスポートとインポートコマンドは、自分で試してみてください.
exp mydul/mydul file=t_a.dmp tables=t_a
imp system/oracle file=t_a.dmp fromuser=mydul touser=system ignore=y
データがインポートされているかどうかを確認します.
SQL> select count(*) from t_b;
COUNT(*)
----------
17
SQL> select count(*) from t_a;
COUNT(*)
----------
17
Oracleのimpがデータをインポートする場合も、Insert文を実行するだけで、同義語とテーブルに分けられますか?
SQL> create table t_a as select * from tab;
Table created.
SQL> create table t_b as select * from tab where rownum < 1;
Table created.
ミッションはT_AテーブルからエクスポートされたレコードをT_にインポートB表にあるので、SYSTEMユーザーに同義語を作りました.
SQL> create synonym t_a for mydul.t_b;
Synonym created.
次のエクスポートとインポートコマンドは、自分で試してみてください.
exp mydul/mydul file=t_a.dmp tables=t_a
imp system/oracle file=t_a.dmp fromuser=mydul touser=system ignore=y
データがインポートされているかどうかを確認します.
SQL> select count(*) from t_b;
COUNT(*)
----------
17
SQL> select count(*) from t_a;
COUNT(*)
----------
17
Oracleのimpがデータをインポートする場合も、Insert文を実行するだけで、同義語とテーブルに分けられますか?
drop table t_a;
drop table t_b;
create table t_a as select * from employee;
create table t_b as select * from employee where rownum<1;
select count(*) from t_a;
select count(*) from hr_employee;
select * from t_b;
:create synonym t_a for user1.t_b