1

1 つのユーザー スキーマにデータを含む一連のテーブルがあります。それらのコピーを別のユーザーに渡したいです。

これはSQLで実行できますか?

ありがとう

4

5 に答える 5

1

2 人のユーザーが同じデータベースにいて、十分なGRANTS数が存在する場合は、新しいユーザー スキーマで次のステートメントを実行します。

create table <tablename> as select * from olduser.<tablename>;

編集:

以下の一連のステートメントをテキスト ファイルにコピーします。<oldueser>既存のスキーマ名と<path>、スプールを書き込む UNIX/Windows マシンのパスに置き換えます。このファイルを既存のスキーマで実行します。name で指定したパスにスプールファイルが書き込まれますtbls.sql。これtbls.sqlを取得して、テーブルを複製する新しいスキーマで実行します。

set head off
set line 100000
set line 100000
set feedback off
spool <path>/tbls.sql
select 'CREATE TABLE ' || TABLE_NAME ||' AS SELECT * FROM <OLDUSER>.'||TABLE_NAME||';'
FROM user_tables; 
spool off
set feedback on
于 2013-02-06T11:29:31.860 に答える
0

「CREATETABLE...AS SELECT」はあなたに役立つかもしれませんか?

ドキュメントを参照してください

ここに良い記事があります

于 2013-02-06T13:58:38.783 に答える
0
  1. 最初のスキーマをエクスポートし、2 番目のスキーマにインポートすることができます。それを妨げる理由がなければ、これを選択します。 ドキュメントはこちらです。

  2. アクセス許可がある場合は、それを行うための小さなスクリプトを作成できます。次のクエリを使用して、ソース ユーザーのすべてのテーブルを選択できます。

    SELECT table_name FROM all_tables WHERE owner = <source_schema>

それらすべてをループし、すぐに実行を使用して新しいテーブルを作成します。(ドキュメントはこちら)

execute immediate 'create <dest>.<tablename> as select * from <source>.<tablename>';

destおよびsourceはスキーマの名前です。 tablenameループから取得したテーブルの名前です。

于 2013-02-06T11:54:21.323 に答える
0

はい、コマンド プロンプトで export コマンドを使用して実行できます。

c:\>exp userid=userid(sql admin)/password owner=username(from which user) direct=y file=filename.dmp

を使用してこれをインポートするには

c:\>imp userid=userid(sql admin)/password file=filename.dmp fromuser=username(from which user) touser=username(imported username)

これを使用して、データをダンプ ファイルにエクスポートし、その後、別のユーザーにインポートする必要があります。

于 2013-02-06T11:26:54.693 に答える
0

create schema2.tablename as select * from schema1.tablename

于 2013-02-06T11:29:22.630 に答える