Oracleの基礎知識--表の管理


scottユーザの下のemp,detpなどのいくつかのテーブルを例に,sqlplusで実証した.
 
1.テーブル構造の表示:
SQL> desc emp;

 
2.既存のテーブルに基づいて新しいテーブルを作成します.
SQL> create table t1 as select * from emp;

    。

もちろん、ここでselect*from empは柔軟に変更できます.
カラム名を変更するには、次の2つの方法があります.
  1).
SQL> create table t1 as select ename a, empno b, sal c from emp;

    。

SQL> desc t1;
                                                         ?   
 ----------------------------------------------------- -------- ------------
 A                                                              VARCHAR2(10)
 B                                                              NUMBER(4)
 C                                                              NUMBER(7,2)

  2).
SQL> create table t1(a, b, c) as select ename,empno,sal from emp;

    。

SQL> desc t1;
                                                         ?   
 ----------------------------------------------------- -------- -------------
 A                                                              VARCHAR2(10)
 B                                                              NUMBER(4)
 C                                                              NUMBER(7,2)

 
3.テーブル構造の変更:
   1). 列長を変更し、上記t 1表Aの列長を20とする.
SQL> desc t1;
                                                         ?   
 ----------------------------------------------------- -------- -------------
 A                                                              VARCHAR2(10)
 B                                                              NUMBER(4)
 C                                                              NUMBER(7,2)

SQL> alter table t1 modify(a varchar2(20));

    。

SQL> desc t1;
                                                         ?   
 ----------------------------------------------------- -------- -------------
 A                                                              VARCHAR2(20)
 B                                                              NUMBER(4)
 C                                                              NUMBER(7,2)

カラムの長さを短くする場合は、カラムの値が設定するカラムの長さを超えていないことを確認します.例:
   
SQL> alter table t1 modify(a varchar2(10));

    。

SQL> alter table t1 modify(a varchar2(2));
alter table t1 modify(a varchar2(2))
                      *
  1      :
ORA-01441:        ,        

  
同様に、カラムのタイプを変更する場合は、カラムの値は空にする必要があります.次のようになります.
SQL> alter table t1 modify(a number(10,2));
alter table t1 modify(a number(10,2))
                      *
  1      :
ORA-01439:        ,           

  
   2). テーブル名の変更:
SQL> rename t1 to t2;

     。

SQL> desc t1;
ERROR:
ORA-04043:    t1    


SQL> desc t2;
                                             ?   
 ----------------------------------------- -------- ------------
 A                                                  VARCHAR2(10)
 B                                                  NUMBER(4)
 C                                                  NUMBER(7,2)

  
   3.) 列名の変更:
SQL> desc t2;
                                             ?   
 ----------------------------------------- -------- -------------
 A                                                  VARCHAR2(10)
 B                                                  NUMBER(4)
 C                                                  NUMBER(7,2)

SQL> alter table t2 rename column a to d;

    。

SQL> desc t2;
                                             ?   
 ----------------------------------------- -------- -------------
 D                                                  VARCHAR2(10)
 B                                                  NUMBER(4)
 C                                                  NUMBER(7,2)

 
   4). 表コメント:
SQL> select comments from user_tab_comments where table_name='T2';

COMMENTS
-------------------------------------------------------------------


SQL> comment on table t2 is '   ';

     。

SQL> select comments from user_tab_comments where table_name='T2';

COMMENTS
-------------------------------------------------------------------
   

  
   5).列コメント
SQL> SELECT COMMENTS FROM USER_COL_COMMENTS WHERE TABLE_NAME='T2';

COMMENTS
------------------------------------------------------------------




SQL> COMMENT ON COLUMN T2.D IS '     ';

     。

SQL> SELECT COMMENTS FROM USER_COL_COMMENTS WHERE TABLE_NAME='T2';

COMMENTS
------------------------------------------------------------------
     

 
4.テーブルの削除
SQL> drop table t2;

    。

実はここでは表を本当に削除していないので、知識はそれを回収ステーションに入れました.以下を確認できます.
SQL> show recyclebin;
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
T2               BIN$l0t3+wZLRb+jDCDBmZ1dhA==$0 TABLE        2011-10-31:20:41:43

original nameは元の名前がt 2であり、回収ステーションの名前はその長い文字列であることがわかります.
ユーザーの既存のテーブルも表示できます.
SQL> select * from tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
BIN$l0t3+wZLRb+jDCDBmZ1dhA==$0 TABLE
BONUS                          TABLE
D                              TABLE
DEPT                           TABLE
E                              TABLE
EMP                            TABLE
PLAN_TABLE                     TABLE
SALGRADE                       TABLE
T3                             TABLE
TEST                           TABLE

 
5.ごみ箱の表を空にする
SQL> show recyclebin;
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
T2               BIN$l0t3+wZLRb+jDCDBmZ1dhA==$0 TABLE        2011-10-31:20:41:43
SQL> purge table t2;

    。

SQL> show recyclebin;

  
6.回収局のテーブルを元に戻す
SQL> create table t2 as select * from emp;

    。

SQL> drop table t2;

    。

SQL> flashback table t2 to before drop;

    。

 
7.現在のユーザーの下にあるrecyclebinを空にする
  
SQL> purge recyclebin;

      。

 
8.テーブルを削除するときは、完全に削除し、ごみ箱に入れない:
SQL> drop table t2 purge;

    。

SQL> show recyclebin;

これで回収ステーションは空いていて、テーブルを復元するにはバックアップを取って復元するしかありません...面倒くさいなぁ~