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で移行するのが確実です(ここで当ツールが助けになるというわけです)。
SQL> alter table EMP rename to EMP_OLD; 表が変更されました。
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: 既存の制約によってすでに使用されている名前です。
SQL> alter table EMP_OLD 2 rename constraint PK_EMP to PK_EMP_OLD; 表が変更されました。
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が存在しているわけではない。
実は ここで言う「既に使用されているオブジェクト名」というのは、テーブル名ではなくてインデックス名を指している模様。
SQL> alter index PK_EMP rename to PK_EMP_OLD; 索引が変更されました。
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!
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行が作成されました。