日期:2014-05-16 浏览次数:20507 次
以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