テーブルのコラムは ADD, MODIFY, DROP演算子により管理できる。
■ADD
テーブルへ新しいコラムを追加
-- VARCHAR2データタイプのaddrコラムをempテーブルへ追加 SQL> ALTER TABLE emp ADD (addr VARCHAR2(50)); 表が変更されました。 SQL>
■MODIFIY
テーブルのコラムを修正及びNOT NULLコラムに変更できる。
コラムが既にデーターを持っている場合、他のデータータイプに変更できない。
-- enameコラムをVARCHAR2、サイズ50に修正した例 SQL> ALTER TABLE emp MODIFY (ename VARCHAR2(50)); 表が変更されました。 SQL> ALTER TABLE emp MODIFY (ename VARCHAR2(50) NOT NULL); 表が変更されました。 SQL>
■DROP
テーブルコラムを削除またはテーブル制約条件を削除できる。
-- コラムの削除文法 ALTER TABLE table_name DROP COLUMN column_name -- 制約条件の削除例 SQL> ALTER TABLE emp2 DROP PRIMARY KEY; 表が変更されました。 -- CASCADEと一緒に使用すると外部キーにより参照されている主キーも削除できる。 SQL> ALTER TABLE dept DROP CONSTRAINT dept_pk_depno CASCADE; 表が変更されました。 SQL>
■既存テーブルのコピー
-既存テーブルを一部及び全て複製するときはサブクエリを持つCREATE TABLEコマンドで簡単にコピーできる。
-制約条件、トリガー、テーブル権限はコピーできない。
-制約条件はNOT NULL条件のみコピーできる。
-- テーブル複製文法 CREATE TABLE [schema.]table_name [LOGGING | NOLOGGING] [....] AS subquery -- テーブル複製例 -- empテーブルを複製してemp6テーブルを作成 SQL> SELECT * FROM emp; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ADDR ---------- -------------------------------------------------- --------- ---------- -------- ---------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 13-08-13 800 20 7499 ALLEN SALESMAN 7698 13-08-13 1600 300 30 7521 WARD SALESMAN 7698 13-08-13 1250 500 30 7566 JONES MANAGER 7839 13-08-13 2975 20 7654 MARTIN SALESMAN 7698 13-08-13 1250 1400 30 7698 BLAKE MANAGER 7839 13-08-13 2850 30 7782 CLARK MANAGER 7839 13-08-13 2450 10 7788 SCOTT ANALYST 7566 13-08-13 3000 20 7839 KING PRESIDENT 13-08-13 5000 10 7844 TURNER SALESMAN 7698 13-08-13 1500 0 30 7876 ADAMS CLERK 7788 13-08-13 1100 20 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ADDR ---------- -------------------------------------------------- --------- ---------- -------- ---------- ---------- ---------- ---------- 7900 JAMES CLERK 7698 13-08-13 950 30 7902 FORD ANALYST 7566 13-08-13 3000 20 7934 MILLER CLERK 7782 13-08-13 1300 10 14行が選択されました。 SQL> SELECT * FROM emp6; SELECT * FROM emp6 * 行1でエラーが発生しました。: ORA-00942: 表またはビューが存在しません。 SQL> CREATE TABLE emp6 2 AS SELECT * FROM emp; 表が作成されました。 SQL> SELECT * FROM emp6; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ADDR ---------- -------------------------------------------------- --------- ---------- -------- ---------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 13-08-13 800 20 7499 ALLEN SALESMAN 7698 13-08-13 1600 300 30 7521 WARD SALESMAN 7698 13-08-13 1250 500 30 7566 JONES MANAGER 7839 13-08-13 2975 20 7654 MARTIN SALESMAN 7698 13-08-13 1250 1400 30 7698 BLAKE MANAGER 7839 13-08-13 2850 30 7782 CLARK MANAGER 7839 13-08-13 2450 10 7788 SCOTT ANALYST 7566 13-08-13 3000 20 7839 KING PRESIDENT 13-08-13 5000 10 7844 TURNER SALESMAN 7698 13-08-13 1500 0 30 7876 ADAMS CLERK 7788 13-08-13 1100 20 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ADDR ---------- -------------------------------------------------- --------- ---------- -------- ---------- ---------- ---------- ---------- 7900 JAMES CLERK 7698 13-08-13 950 30 7902 FORD ANALYST 7566 13-08-13 3000 20 7934 MILLER CLERK 7782 13-08-13 1300 10 14行が選択されました。 SQL>
■テーブルスペース変更
ORACLE 8iからは ALTER TABLE ~ MOVE TABLESPACEコマンドで簡単にテーブルスペースを変更できる。
--テーブルスペース変更文 ALTER TABLE table_name Move TABLESPACE tablespace_name; --テーブルスペース変更例 --scottユーザーへ権限付与 SQL> GRANT CREATE TABLESPACE, ALTER TABLESPACE, DROP TABLESPACE TO scott WITH ADMIN OPTION; 権限付与が成功しました。 --scottユーザーで接続 SQL> conn scott/tiger 接続されました。 SQL> show user ユーザーは"SCOTT"です。 --test01テーブルスペース作成 SQL> CREATE TABLESPACE test01 DATAFILE 'test01.dbf' SIZE 20M; 表領域が作成されました。 --テーブルスペースの変更 SQL> ALTER TABLE emp 2 MOVE TABLESPACE test01; 表が変更されました。 SQL>
■テーブルのTRUNCATE
-テーブルをTruncateするとテーブルの安部手の行が削除され、使用された領域が解除される
-TRUNCATE TABLEはDDLなのでロールバックデーターは作成されない。
-DELETEコマンドでデーターを削除するとROLL BACKコマンドで復旧できるが、TRUNCATEデーターを削除すると復旧できない。
-外部キー参照中のテーブルはTRUNCATEできない。
-TRUNCATEコマンドを使用すると削除トリガーが実行できない。
--TRUNCATE文法 TRUNCATE TABLE [schema.]table_name;
■テーブル削除(DROP TABLE)
--テーブル削除文法 DROP TABLE [schema.]table_name [CASCADE CONSTRAINTS]; --empテーブル削除 SQL> DROP TABLE emp; 表が削除されました。 --CASCADE CONSTRAINTは外部キーにより参照している主キーを含むテーブルの場合 --主キーを参照してる外部キー条件も一緒に削除する。 SQL> DROP TABLE emp CASCADE CONSTRAINT;
0 件のコメント:
コメントを投稿