294

私は声明を知っています:

create table xyz_new as select * from xyz;

どちらが構造とデータをコピーしますが、構造だけが必要な場合はどうすればよいでしょうか?

4

17 に答える 17

459

行を選択しない where 句を使用するだけです。

create table xyz_new as select * from xyz where 1=0;

制限事項

次のものは、新しいテーブルにコピーされません。

  • シーケンス
  • トリガー
  • インデックス
  • 一部の制約はコピーできない場合があります
  • マテリアライズド ビュー ログ

これもパーティションを処理しません


于 2008-10-24T14:55:55.660 に答える
88

私はあなたがよく受け入れた方法を使用しましたが、誰かが指摘したように、それは制約を複製しません(NOT NULLを除いて、私は思います)。

完全な構造を複製する場合のより高度な方法は次のとおりです。

SET LONG 5000
SELECT dbms_metadata.get_ddl( 'TABLE', 'MY_TABLE_NAME' ) FROM DUAL;

これにより、新しいテーブルを作成するために必要に応じて変更できる完全なcreateステートメントテキストが提供されます。もちろん、テーブルの名前とすべての制約を変更する必要があります。

(これは、EXP / IMPを使用して古いバージョンでも実行できますが、現在ははるかに簡単です。)

追加するために編集 あなたが探しているテーブルが別のスキーマにある場合:

SELECT dbms_metadata.get_ddl( 'TABLE', 'MY_TABLE_NAME', 'OTHER_SCHEMA_NAME' ) FROM DUAL;
于 2008-10-27T15:47:40.957 に答える
17
create table xyz_new as select * from xyz where rownum = -1;

何度も繰り返すのを避け、1=2 の条件に基づいて何も挿入しないようにするには

于 2013-12-21T17:49:17.773 に答える
16

SQL Developer を使用してテーブルを選択し、[DDL] タブをクリックします。

そのコードを使用して、SQLワークシートで実行すると、データのない新しいテーブルを作成できます

sqldeveloper は、Oracle の無料で使用できるアプリです。

テーブルにシーケンスまたはトリガーがある場合、ddl がそれらを生成することもあります。作成する順序に注意し、いつトリガーをオンまたはオフにするかを知っておく必要があります.

于 2008-10-24T14:54:38.360 に答える
4

これを行うことができます Create table New_table as select * from Old_table where 1=2 ; が、注意 してください。作成するテーブルには、old_table のような Index や PK などはありません。

于 2015-12-10T23:14:18.280 に答える
1

次のようなクエリを書くだけです。

create table new_table as select * from old_table where 1=2;

ここnew_tableで、 は作成する新しいテーブルのold_table名前であり、 は構造をコピーする既存のテーブルの名前です。これにより、構造のみがコピーされます。

于 2014-02-07T14:34:06.387 に答える
1
SELECT * INTO newtable
FROM oldtable
WHERE 1 = 0;

別のスキーマを使用して、新しい空のテーブルを作成します。クエリがデータを返さない WHERE 句を追加するだけです。

于 2017-08-31T23:21:21.183 に答える
0

あなたもすることができます

create table abc_new as select * from abc; 

次に、テーブルを切り捨てますabc_new。これで要件が満たされることを願っています。

于 2011-02-24T06:46:27.257 に答える
0

pl/sql 開発者を使用して、SQL ワークスペースまたはオブジェクト エクスプローラーで table_name を右クリックし、[view] をクリックしてから [view sql] をクリックすると、SQL スクリプトが生成され、すべての制約と共にテーブルが作成されます。 、インデックス、パーティションなど

次に、new_table_name を使用してスクリプトを実行します。

于 2015-06-11T08:29:40.580 に答える
-1
  1. select * from xyz; としてテーブル xyz_new を作成します。

-- これにより、テーブルが作成され、すべてのデータがコピーされます。

  1. xyz_new から削除します。

-- これは同じテーブル構造になりますが、コピーされたすべてのデータは削除されます。

回答で指定された制限を克服したい場合: データをコピーせずに Oracle テーブルのコピーを作成するにはどうすればよいですか?

于 2019-08-13T19:54:03.983 に答える
-6

上記のタスクは、2 つの簡単な手順で完了できます。

ステップ1:

CREATE table new_table_name AS(Select * from old_table_name);

上記queryはテーブルの複製を作成します(コンテンツも含む)。

構造を取得するには、を使用してテーブルの内容を削除します。

ステップ2:

DELETE * FROM new_table_name.

これで問題が解決することを願っています。そして、以前の投稿に感謝します。多くの洞察を与えてくれました。

于 2012-08-28T20:07:02.657 に答える