0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Oracle Databaseでテーブルをデータごとコピーする

Last updated at Posted at 2025-05-02

Oracle Databaseでテーブルをデータごとコピーする方法を紹介します。

SQL*Plus

CREATE TABLE ~ AS SELECTを利用します。

CREATE TABLE EMPLOYEES_COPIED AS SELECT * FROM EMPLOYEES

この方法はインデックスや制約、コメントなどはコピーされないことに注意しましょう。

SQLDeveloper

対象のテーブルを右クリック > 表(C) > コピー(B)を選択する。

image.png

必要な値を入力し、「適用(A)」を押下します。

image.png

この方法はデータだけでなく、制約やインデックス、コメントもコピー可能です。

PL/SQL

すべてのテーブルにタイムスタンプをつけて、コピーするプロシージャです。開発中・検証中によく使うのでおまけとして紹介します。

SET SERVEROUTPUT ON;
DECLARE
  yyyymmdd VARCHAR2(1000);
  stmt VARCHAR2(1000); 
BEGIN
  yyyymmdd := TO_CHAR(SYSDATE, 'YYYYMMDD');
  FOR cur IN (SELECT * FROM USER_TABLES) LOOP
    stmt := 'CREATE TABLE ' || cur.TABLE_NAME || '_' || yyyymmdd || ' AS SELECT * FROM ' || cur.TABLE_NAME;
    DBMS_OUTPUT.PUT_LINE('EXECUTE => ' || stmt);
    EXECUTE IMMEDIATE stmt;
  END LOOP;
END;
/

コピー対象を絞りたい場合は、SELECT * FROM USER_TABLESに適切なWHERE節を追加してください。

利用例

以下のとおりにテーブルがあるとします。

image.png

この状態で、上記のプロシージャを実行すると、以下のようなログがコンソールに表示されます。

EXECUTE => CREATE TABLE REGIONS_20240525 AS SELECT * FROM REGIONS
EXECUTE => CREATE TABLE COUNTRIES_20240525 AS SELECT * FROM COUNTRIES
EXECUTE => CREATE TABLE LOCATIONS_20240525 AS SELECT * FROM LOCATIONS
EXECUTE => CREATE TABLE DEPARTMENTS_20240525 AS SELECT * FROM DEPARTMENTS
EXECUTE => CREATE TABLE JOBS_20240525 AS SELECT * FROM JOBS
EXECUTE => CREATE TABLE EMPLOYEES_20240525 AS SELECT * FROM EMPLOYEES
EXECUTE => CREATE TABLE JOB_HISTORY_20240525 AS SELECT * FROM JOB_HISTORY


PL/SQLプロシージャが正常に完了しました。

実行結果は以下の通りです。

image.png

環境情報

SELECT * FROM v$version;
BANNER BANNER_FULL BANNER_LEGACY CON_ID
Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production 0

image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?