日期:2014-05-16  浏览次数:20487 次

Oracle基础知识--管理表

以scott用户下的emp、detp等几个表作为示例,在sqlplus下演示。

?

1. 查看表结构:

SQL> desc emp;

?

2. 在现有表基础上建立新表:

SQL> create table t1 as select * from emp;

表已创建。

?? 当然,此处select * from emp可以灵活更改。

?? 如果想更改列名,有两种办法:

??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). 修改列长度,将上述t1表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