购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.1 Oracle数据类型介绍

Oracle支持多种数据类型,主要有数值类型、日期与时间类型和字符串类型等。

(1)数值类型:包括整数类型和小数类型。

(2)日期与时间类型:包括DATE和TIMESTAMP。

(3)字符串类型:包括CHAR、VARCHAR2、NVARCHAR2、NCHAR和LONG五种。

4.1.1 数值类型

数值类型主要用来存储数字,Oracle提供了多种数值类型,不同的数值类型提供不同的取值范围,可以存储的值范围越大,其所需要的存储空间就越大。Oracle的数值类型主要通过number(m,n)类型来实现。使用的语法格式如下:

     number(m,n)

其中m的取值范围为1~38,n的取值范围为-84~127。

number(m,n)是可变长的数值列,允许0、正值及负值,m是所有有效数字的位数,n是小数点以后的位数,例如:

     number(5,2)

则这个字段的最大值是99.999,如果数值超出了位数限制,就会被截取多余的位数。

例如:

     number(5,2)

但在一条数据记录中,这个字段输入575.316,真正保存到字段中的数值是575.32。

例如:

     number(3,0)

输入575.316,真正保存的数据是575。对于整数,可以省略后面的0,直接表示如下:

     number(3)

在3.3节中,有如下创建数据表的语句:

id字段的数据类型为NUMBER(11),注意到后面的数字11,表示的是该数据类型指定的最大长度,如果插入数值的位数大于11,就会弹出以下错误信息:

     ERROR:
     ORA-01438: 值大于为此列指定的允许精度

【例4.1】若要创建数据表tmp1,其中字段x、y的数据类型依次为NUMBER(4)、NUMBER(6),可执行如下的SQL语句:

该语句执行成功之后,可用DESC查看所创建表的结构,结果如下:

不同的数值类型的长度不同,取值范围也不同,需要不同大小的存储空间。因此,应该根据实际需要选择合适的数据类型,这样有利于提高数据查询的效率和节省存储空间。

【例4.2】若要创建数据表tmp2,其中字段x、y、z的数据类型依次为NUMBER (5,1)、NUMBER(5,3)和NUMBER (5,2),向表中插入数据5.1、5.15和5.123,可执行如下的SQL语句:

向数据表中插入数据:

     SQL>INSERT INTO tmp2 VALUES(5.12, 5.15, 5.123);

插入数据后,要查询已输入的数据信息,可执行如下的SQL语句:

从查询结果可以看到,5.12和5.123分别被存储为5.1和5.12。

4.1.2 日期与时间类型

Oracle中表示日期的数据类型主要有DATE和TIMESTAMP,具体含义和区别如表4-1所示。

表4-1 日期与时间数据类型

【例4.3】若要创建数据表tmp3,定义数据类型为date的字段d,向表中插入值'12-5月-2010',可执行如下的SQL语句:

首先创建表tmp3:

     CREATE TABLE tmp3
     (
       d date
     );

在插入数据之前,需要知道数据库默认的时间格式,查询的SQL语句如下:

     SQL> select sysdate from dual;
     SYSDATE
     --------------
     23-10月-20

向表中插入数据:

     SQL> INSERT INTO tmp3 values('12-5月-2020');

查看结果如下:

     SQL> SELECT * FROM tmp3;
     D
     --------------
     12-5月-20

如果用户想按照指定的格式输入时间,就需要修改时间的默认格式。例如输入格式为年-月-日,修改的SQL语句如下:

     SQL> alter session set nls_date_format='yyyy-mm-dd';

【例4.4】若要创建数据表tmp4,定义数据类型为DATE的字段d,向表中插入“YYYY-MM-DD”和“YYYYMMDD”字符串格式日期,可执行如下的SQL语句:

首先创建数据表tmp4:

     SQL> CREATE TABLE tmp4
     (
       d   DATE
     );

修改日期的默认格式,SQL语句如下:

     SQL> alter session set nls_date_format='yyyy-mm-dd';

向表中插入“YYYY-MM-DD”格式日期:

     SQL> INSERT INTO tmp4 values('2018-08-08');

向表中插入“YYYYMMDD”格式日期:

     SQL> INSERT INTO tmp4 values('20180808');

查看插入结果:

     SQL> SELECT * FROM tmp4;
     D
     ----------
     2018-08-08
     2018-08-08

可以看到,各个不同类型的日期值都正确地插入到数据表中。

【例4.5】若要向数据表tmp4中插入系统当前日期,可执行如下的SQL语句:

首先删除表中的数据:

     DELETE FROM tmp4;

向表中插入系统当前日期:

     SQL> INSERT INTO tmp4 values(SYSDATE );

查看插入结果:

     SQL> SELECT * FROM tmp4;
     D
     ----------
     2020-10-23

【例4.6】若要向数据表tmp4中插入系统日期和时间并指定格式,可执行如下的SQL语句:

首先删除表中的数据:

     DELETE FROM tmp4;

向表中插入系统当前日期:

         SQL> INSERT INTO tmp4 values(to_date('2020-10-23 13:14:20','yyyy-MM-dd
     HH24:mi:ss') );

查看插入结果:

     SQL> SELECT * FROM tmp4;
     D
     ----------
     2020-10-23

从查询结果可以看出,只显示日期,时间被省略掉了。

【例4.7】若要创建数据表tmp5,定义数据类型为TIMESTAMP的字段ts,向表中插入值'2020-10-23 17:03:00.9999',可执行如下的SQL语句:

创建数据表tmp5:

     CREATE TABLE tmp5
     (
       ts  TIMESTAMP
     );

向表中插入数据:

    INSERT INTO tmp5 values (to_timestamp('2020-10-23 17:03:00.9999',
'yyyy-mm-dd hh24:mi:ss:ff'));

查看插入结果:

     SQL> SELECT * FROM tmp5;
     TS
     -------------------------------------------------------------
     23-10月-20 05.03.00.999900 下午

4.1.3 字符串类型

字符串类型用来存储字符串数据。Oracle中的字符串类型指CHAR、VARCHAR2、NCHAR、NVARCHAR2和LONG。表4-2列出了Oracle中的字符串数据类型。

表4-2 Oracle中的字符串数据类型

VARCHAR2、NVARCHAR2和LONG是变长类型,对于其存储需求取决于列值的实际长度,而不是取决于类型的最大可能尺寸。例如,一个VARCHAR2(10)列能保存一个最大长度为10个字符的字符串。

【例4.8】若要创建数据表tmp6,定义字段ch和vch的数据类型依次为CHAR(4)、VARCHAR2(4),向表中插入数据'ab',可执行如下的SQL语句:

创建数据表tmp6:

输入数据:

     INSERT INTO tmp6 VALUES('ab', 'ab');

查询ch字段的存储长度,SQL语句如下:

查询vch字段的存储长度,SQL语句如下:

从查询结果可以看到,定长字符串在存储时长度是固定的,而变长字符串的存储长度根据实际插入的数据长度而定。 UKnFLkGLDKFoB++GwRcxPwLoGxe06+bbvp26n7DR0LXPPY9I9wix0VbT95y5+ReM

点击中间区域
呼出菜单
上一章
目录
下一章
×