回答:
行を選択しない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;
My_table_name
は既存のテーブルです。しかし、新しいテーブルの名前を作成するにはどうすればよいですか?
new_table = dbms_metadata.get_ddl( 'TABLE', 'MY_TABLE_NAME', 'OTHER_SCHEMA_NAME' ).
その間、ここでLONGが何をするか教えてください。
SQL開発者を使用してテーブルを選択し、DDLタブをクリックします
そのコードを使用して、SQLワークシートで実行すると、データのない新しいテーブルを作成できます
sqldeveloperはoracleの無料アプリです。
テーブルにシーケンスまたはトリガーがある場合、ddlはそれらも生成することがあります。あなたはちょうどあなたがそれらをどのような順序で作るか注意しなければならず、いつトリガーをオンまたはオフにするかを知っている必要があります。
SQL
あなたもすることができます
create table abc_new as select * from abc;
次に、テーブルを切り捨てますabc_new
。これで十分でしょう。
次のようなクエリを記述するだけです。
create table new_table as select * from old_table where 1=2;
どこnew_table
新しいテーブルの名前は、作成したいとということであるold_table
構造、コピーしたい既存のテーブルの名前で、これは構造のみをコピーします。
または、以下のコマンドからテーブル作成のddlを取得し、作成を実行できます。
SELECT DBMS_METADATA.GET_DDL('TYPE','OBJECT_NAME','DATA_BASE_USER') TEXT FROM DUAL
TYPE
であるTABLE
、PROCEDURE
などこのコマンドを使用すると、データベースオブジェクトからddlの大部分を取得できます。
GET_DDL
は大文字と小文字が区別されることに注意してください。
Create table target_table
As
Select *
from source_table
where 1=2;
Source_tableは、構造をコピーするテーブルです。
pl / sql開発者を使用して、sqlワークスペースまたはオブジェクトエクスプローラーでtable_nameを右クリックし、[view]をクリックして[view sql]をクリックすると、すべての制約とともにテーブルを作成するSQLスクリプトが生成されます。 、インデックス、パーティションなど。
次に、new_table_nameを使用してスクリプトを実行します
- select x 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.
これで問題が解決することを願っています。そして、以前の投稿に感謝します。私に多くの洞察を与えました。
truncate
バージョンよりも効率が悪いです。すべてのデータにエクステントを割り当てるだけでなく、削除してもエクステントが解放されないので、テーブルが古いサイズに大きくならない限り、スペースを無駄にする可能性があります。そして、挿入と削除の両方で元に戻す/やり直しを生成しています。ジムの答えは非常に単純にそのすべてを回避します。