S-JIS[2004-11-18]

Oracle データ移行SQL 生成ツール

for Excel by Excel2003

Oracleでテーブルの内容を別のテーブルへ移送する為のSQL文を生成するツールです。

このツールは、テーブルへの項目追加をする際の手助けとして作りました。

シートの所定の場所に値を記入した後に「生成ボタン」をクリックすると、SELECT-INSERTのSQL文のファイルを生成します。
このファイルをSQL*Plusから実行すると、テーブルの内容が移送されます。

selins.lzh(11.3 kBYTE)


以下のような表から、SQL文を生成します。
項目一覧は、SQL*Plusのdescコマンドを使って表示したものをそのままコピー&ペーストするだけでOKです。

  A B C  D 
1 SQLファイル名: c:\emp_iko.sql    
2   ↓移行先 ↓移行元  
3 テーブル名: EMP EMP_OLD  
4 WHERE条件:      
5 ソート:      
6 項目: EMPNO EMPNO  
7   ENAME ENAME  
8   JOB JOB  
9   MGR    
10   HIREDATE '2004/11/12'  
11   SAL null  
12   COMM    
13   DEPTNO    
14        


c:\emp_iko.sql:

insert into EMP(
 EMPNO,
 ENAME,
 JOB,
 HIREDATE,
 SAL)
select
 EMPNO,
 ENAME,
 JOB,
 '2004/11/12',
 null
from EMP_OLD;


SQL*Plusから、このコマンドファイルを実行

$ sqlplus ユーザー/パスワード@SID @emp_iko.sql

テーブル変更(項目追加

テーブルから項目を削除するには、「ALTER TABLE DROP」するだけで済みますが、項目を追加する際に「ALTER TABLE ADD」を使うとテーブルの一番最後尾に追加されてしまいます。
これを避けたい場合、元のテーブルを改名して保存し、新しいテーブルをCREATEしてデータをSELECT-INSERTで移行するのが確実です(ここで当ツールが助けになるというわけです)。

  1. 元のテーブルをリネームする。
    SQL> alter table EMP rename to EMP_OLD;
    
    表が変更されました。
  2. 新しいテーブルを作成する。
    SQL> CREATE TABLE EMP(
      2     EMPNO NUMBER(4),
      3     ENAME VARCHAR2(10),
      4     JOB VARCHAR2(9),
      5     MGR NUMBER(4),
      6     HIREDATE DATE,
      7     SAL NUMBER(7,2),
      8     COMM NUMBER(7,2),
      9     DEPTNO NUMBER(2),
     10  CONSTRAINT PK_EMP PRIMARY KEY(EMPNO)
     11  );
    CONSTRAINT PK_EMP PRIMARY KEY(EMPNO)
               *
    行10でエラーが発生しました。:
    ORA-02264: 既存の制約によってすでに使用されている名前です。
  3. 制約が付けられている場合、制約名もリネームする。(DROPでもいいだろうけど)
    SQL> alter table EMP_OLD
      2  rename constraint PK_EMP to PK_EMP_OLD;
    
    表が変更されました。
  4. 再度CREATE TABLEを実行する。
    SQL> CREATE TABLE EMP(
      2     EMPNO NUMBER(4),
      3     ENAME VARCHAR2(10),
      4     JOB VARCHAR2(9),
      5     MGR NUMBER(4),
      6     HIREDATE DATE,
      7     SAL NUMBER(7,2),
      8     COMM NUMBER(7,2),
      9     DEPTNO NUMBER(2),
     10  CONSTRAINT PK_EMP PRIMARY KEY(EMPNO)
     11  );
    CREATE TABLE EMP(
    *
    行1でエラーが発生しました。:
    ORA-00955: すでに使用されているオブジェクト名です。

    おかしいな?と思って調べてみると

    SQL> desc EMP
    ERROR:
    ORA-04043: オブジェクトEMPは存在しません。
    SQL> drop table EMP;
    drop table EMP
               *
    行1でエラーが発生しました。:
    ORA-00942: 表またはビューが存在しません。

    ということで、EMPが存在しているわけではない。
    実は ここで言う「既に使用されているオブジェクト名」というのは、テーブル名ではなくてインデックス名を指している模様。
     

  5. インデックスが付けられている場合(→インデックスの確認方法)、インデックス名をリネームする。(DROPでもいいだろうけど)
    SQL> alter index PK_EMP rename to PK_EMP_OLD;
    
    索引が変更されました。
  6. 今度こそ!CREATE TABLEを実行する。
    SQL> CREATE TABLE EMP(
      2     EMPNO NUMBER(4),
      3     ENAME VARCHAR2(10),
      4     JOB VARCHAR2(9),
      5     MGR NUMBER(4),
      6     HIREDATE DATE,
      7     SAL NUMBER(7,2),
      8     COMM NUMBER(7,2),
      9     DEPTNO NUMBER(2),
     10  CONSTRAINT PK_EMP PRIMARY KEY(EMPNO)
     11  );
    
    表が作成されました。

    OK!
     

  7. データを移行する。
    SQL> insert into EMP(
      2   EMPNO,
      3   ENAME,
      4   JOB,
      5   HIREDATE,
      6   SAL)
      7  select
      8   EMPNO,
      9   ENAME,
     10   JOB,
     11   '2004/11/12',
     12   null
     13  from EMP_OLD;
    
    14行が作成されました。

自作ソフトページに戻る
メールの送信先:ひしだま