数据类型 说明 VARCHAR2(size) 可变长度的字符数据 CHAR(size) 固定长度的字符数据 NUMBER(p,s) 可变长度的数字数据 DATE 日期和时间值 LONG 最大2G的可变长度字符数据 CLOB 最大4G的字符数据 RAW and LONG RAW 原始二进制数据 BLOB 最大4G的二进制数据 BFILE 最大4G的,存储在外部文件中的二进制数据 ROWID 一个64进制的数制系统,表示表中一行的唯一地址
SELECT start_date FROM new_employees; 17-JUN-87 12.00.00.0000000 AM 21-SEP-89 12.00.00.0000000 AM (日-月-年 时.分.秒)
TIMESTAMP WITH TIME ZONE 数据类型 ::TIMESTAMP WITH TIME ZONE是TIMESTAMP的一个变量,它对TIMESTAMP值进行一个时区转换
::在本地时间和UTC 之间,小时和分钟的时区转换是不同的
TIMESTAMP[(fractional_seconds_precision)] WITH TIME ZONE
日期时间数据类型
UTC代表协调世界时—以前的格林尼治标准时间。如果两个TIMESTAMP WITH TIME ZONE在UTC中代表同一时刻,它们的值被认为是相同的,而不管存储在数据中的TIME ZONE偏移。 因为TIMESTAMP WITH TIME ZONE也可以存储时区信息,它特别适合记录那些必须组合或协调地理区域的日期信息。
::TIMESTAMP WITH LOCAL TIME ZONE数据类型被如下指定:TIMESTAMP[(fractional_seconds_precision)]WITH LOCAL TIME ZONE
日期时间数据类型 不像TIMESTAMP WITH TIME ZONE,你可以指定TIMESTAMP WITH LOCAL TIME ZONE类型作为一个主键或唯一键的一部分。在本地时间和UTC之间的时区转换 (小时或分钟) 是不同的,对于TIMESTAMP WITH LOCAL TIME ZONE是非文字的。
注:小数秒精度指定SECOND日期时间字段的小数部分数字的数目,其范围是0到9,默认是6。
例 CREATE TABLE time_example (order_date TIMESTAMP WITH LOCAL TIME ZONE);
INSERT INTO time_example VALUES('15-NOV-00 09:34:28 AM');
SELECT * FROM time_example; order_date ---------------------------- 15-NOV-00 09.34.28.000000 AM
TIMESTAMP WITH LOCAL TIME ZONE类型适合于两层应用程序,在其中你可以用客户系统的时区显示日期和时间。
INTERVAL YEAR TO MONTH数据类型 ::INTERVAL YEAR TO MONTH存储一个使用年和月时间域的时间段
INTERVAL YEAR [(year_precision)] TO MONTH
INTERVAL '123-2' YEAR(3) TO MONTH Indicates an interval of 123 years, 2 months.
INTERVAL '123' YEAR(3) Indicates an interval of 123 years 0 months.
INTERVAL '300' MONTH(3) Indicates an interval of 300 months.
INTERVAL '123' YEAR Returns an error, because the default precision is 2, and '123' has 3 digits.
name列中最多是kjat有四个字符.所以改成>=4个就可以了. SQL> alter table a 2 modify(name varchar2(3)); modify(name varchar2(3)) * ERROR 位于第 2 行: ORA-01441: 无法减小列长度, 因为一些值过大
SQL> alter table a 2 modify(name varchar2(4)); /5/...
表已更改。
删除列
用DROP COLUMN 子句从表中删除列 ALTER TABLE dept80 DROP COLUMN job_id; Table altered.
SQL> alter table a 2 add (id number);
SQL> desc a; 名称 是否为空? 类型 ----------------------------------------- -------- ------------------ JOBS VARCHAR2(9) SALS NUMBER(7,2) NAME VARCHAR2(4) ID NUMBER SQL> alter table a 2 drop column id;
SQL> desc a; 名称 是否为空? 类型 ----------------------------------------- -------- ------------------ JOBS VARCHAR2(9) SALS NUMBER(7,2) NAME VARCHAR2(4)
SQL> alter table a 2 add (id number);
SQL> alter table a 2 drop (id); 表已更改。
SQL> desc a; 名称 是否为空? 类型 ----------------------------------------- -------- -------------- JOBS VARCHAR2(9) SALS NUMBER(7,2) NAME VARCHAR2(4)
SET UNUSED选项 ::用SET UNUSED选项标记一个或多个不经常使用的列 ::用DROP UNUSED COLUMNS选项删除被标记为不经常使用的列
Alter Table table Set UNUSED (column); or Alter Table table Set UNUSED COLUMN column;
Alter Table table DROP UNUSED COLUMNS;
SET UNUSED选项 SET UNUSED选项标记一个或多个列作为不使用的,所以,当需求的系统资源较低时他们可以被删除,该特性在Oracle8i和以后的版本中有效。指定该子句不会真的从表的每一行中删除目标列 (即,它不会恢复这些列所使用的磁盘空间),因此,SET UNUSED选项标记的执行响应时间会比执行DROP子句快一些。不使用的列就好象它被删除了一样的被处理,即使他们的列数据还保留在表的行中。在一列已经被标记为不使用后,你就不能访问该列了。一个SELECT *查询不会从标记为不使用的列返回数据。另外,在使用DESCRIBE命令时,被标记为不使用的列的名字和类型将不再显示,并且你可以用一个与不使用列相同的名字添加一个新列到表中。SET UNUSED信息被存储在USER_UNUSED_COL_TABS字典视图中。
DROP UNUSED COLUMNS选项 DROP UNUSED COLUMNS从表中删除当前所有被标记为不使用的列,当你想要从表中的不使用列回收额外的磁盘空间时你可以用该语句,如果表中不包含不使用列,该语句不返回错误。
ALTER TABLE dept80 SET UNUSED (last_name); Table altered.
ALTER TABLE dept80 DROP UNUSED COLUMNS; Table altered.