私は声明を知っています:
create table xyz_new as select * from xyz;
どちらが構造とデータをコピーしますが、構造だけが必要な場合はどうすればよいでしょうか?
私は声明を知っています:
create table xyz_new as select * from xyz;
どちらが構造とデータをコピーしますが、構造だけが必要な場合はどうすればよいでしょうか?
行を選択しない where 句を使用するだけです。
create table xyz_new as select * from xyz where 1=0;
次のものは、新しいテーブルにコピーされません。
これもパーティションを処理しません
私はあなたがよく受け入れた方法を使用しましたが、誰かが指摘したように、それは制約を複製しません(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;
create table xyz_new as select * from xyz where rownum = -1;
何度も繰り返すのを避け、1=2 の条件に基づいて何も挿入しないようにするには
SQL Developer を使用してテーブルを選択し、[DDL] タブをクリックします。
そのコードを使用して、SQLワークシートで実行すると、データのない新しいテーブルを作成できます
sqldeveloper は、Oracle の無料で使用できるアプリです。
テーブルにシーケンスまたはトリガーがある場合、ddl がそれらを生成することもあります。作成する順序に注意し、いつトリガーをオンまたはオフにするかを知っておく必要があります.
これを行うことができます
Create table New_table as select * from Old_table where 1=2 ;
が、注意
してください。作成するテーブルには、old_table のような Index や PK などはありません。
次のようなクエリを書くだけです。
create table new_table as select * from old_table where 1=2;
ここnew_table
で、 は作成する新しいテーブルのold_table
名前であり、 は構造をコピーする既存のテーブルの名前です。これにより、構造のみがコピーされます。
SELECT * INTO newtable
FROM oldtable
WHERE 1 = 0;
別のスキーマを使用して、新しい空のテーブルを作成します。クエリがデータを返さない WHERE 句を追加するだけです。
あなたもすることができます
create table abc_new as select * from abc;
次に、テーブルを切り捨てますabc_new
。これで要件が満たされることを願っています。
pl/sql 開発者を使用して、SQL ワークスペースまたはオブジェクト エクスプローラーで table_name を右クリックし、[view] をクリックしてから [view sql] をクリックすると、SQL スクリプトが生成され、すべての制約と共にテーブルが作成されます。 、インデックス、パーティションなど
次に、new_table_name を使用してスクリプトを実行します。
- select * from xyz; としてテーブル xyz_new を作成します。
-- これにより、テーブルが作成され、すべてのデータがコピーされます。
- xyz_new から削除します。
-- これは同じテーブル構造になりますが、コピーされたすべてのデータは削除されます。
回答で指定された制限を克服したい場合: データをコピーせずに Oracle テーブルのコピーを作成するにはどうすればよいですか?
上記のタスクは、2 つの簡単な手順で完了できます。
CREATE table new_table_name AS(Select * from old_table_name);
上記query
はテーブルの複製を作成します(コンテンツも含む)。
構造を取得するには、を使用してテーブルの内容を削除します。
DELETE * FROM new_table_name.
これで問題が解決することを願っています。そして、以前の投稿に感謝します。多くの洞察を与えてくれました。