Oracleでテーブルコピーを実施する方法です。テーブルのバックアップを作成する時に高頻度で使用すると思います。
テーブルのコピー
テーブルのコピー、つまり複製ですが、3つの結果によって少しだけSQLを変える必要があります。
- テーブルのデータを丸ごとコピー
- テーブルのデータの一部をコピー
- テーブルの構造(定義)だけコピー
コピーの結果がどうなるかによって、SQLを変える必要があるので注意して下さい。
テーブルのデータごとコピーする
テーブルのデータごと、つまり、テーブル定義とデータをそのままコピーする場合、次の様にSQLを書けばOKです。
ぶっちゃけこれだけです。実際に実行してみます。今「TAB_PRODUCT_FRUIT」というテーブルがあるので、これを「NEW_TAB_PRODUCT_FRUIT」というテーブルの名前で複製します。コピー元のテーブルの状態はこんな感じです。
テーブルをコピーします。次のSQLを作成しました。
実際に実行しましょう。
では、新しく作成したテーブルを見てみます。
データ入っています。
テーブルのデータの一部をコピー
テーブルのデータの一部をコピーして複製する場合、WHERE句に条件を指定することで実現可能です。
先ほどと同じように「TAB_PRODUCT_FRUIT」というテーブルをコピー元にして、一部のデータだけコピーしたテーブルを作成します。
実行後に「NEW_TAB_PRODUCT_FRUIT_1」テーブルが出来て、「CODE」カラムの値が「001」のデータのみ入っていれば成功です。実際に実行してみましょう。
エラーにはなっていませんね。実際に「NEW_TAB_PRODUCT_FRUIT_1」の中身を確認してみます。
大丈夫みたいですね。
テーブルの構造だけコピーする
テーブルの構造だけコピーする場合は、ちょっと工夫してWHERE句を付けてあげる必要があります。構文は次に様に書けばOKです。
ちょっと意味分からない…と言う人は、とりあえずWHERE句をコピペで良いと思います。先ほどと同じように「TAB_PRODUCT_FRUIT」というテーブルをコピー元にしてテーブル定義のみを複製してみます。
では実行しましょう。
果たして中身は…
「データが見つかりません」という絶妙な返事が来ましたね。テーブルがなければエラーメッセージ「ORA-00942: 表またはビューが存在しません。」と怒られるので、テーブルは存在します。念のためレコード数を取得してみましょうか。
見事に0件ですね。これでテーブル定義だけがコピーされたことが分かると思います。