专栏首页小麦苗的DB宝专栏【DB笔试面试442】 Oracle的数据类型有哪些?

【DB笔试面试442】 Oracle的数据类型有哪些?

题目

Oracle的数据类型有哪些?

答案

Oracle的数据类型分为标量(Scalar)类型、复合(Composite)类型、引用(Reference)类型和LOB(Large Object)类型4种类型。

因为标量类型没有内部组件,所以,它又分为四类:数值、字符、布尔和日期/时间。

复合类型也叫组合类型,它包含了能够被单独操作的内部组件,每个组件都可以单独存放值,所以,一个复合变量可以存放多个值。因为复合变量类型不是数据库中已经存在的数据类型,所以,复合变量在声明类型之前,首先要创建复合类型,复合类型创建后可以多次使用,以便定义多个复合变量。复合变量像标量变量一样也有数据类型,复合数据类型有记录(RECORD)、表(TABLE)、嵌套表(Nested TABLE)和数组(VARRAY)四种类型,其中,表、嵌套表和数组也称为集合,而集合类型(表、嵌套表和数组)在使用时必须先使用TYPE进行定义方可使用。记录是由一组相关但又不同的数据类型组成的逻辑单元。表是数据的集合,可将表中的数据作为一个整体进行引用和处理。嵌套表是表中之表。一个嵌套表是某些行的集合,它在主表中表示为其中的一列。对主表中的每一条记录,嵌套表可以包含多个行。在某种意义上,它是在一个表中存储一对多关系的一种方法。可变数组(VARRAY)存储固定数量的元素(在运行中,可以改变元素数量),使用顺序数字作下标,可以定义等价的SQL类型,可以存储在数据库中。可以用SQL进行存储和检索,但比嵌套表缺乏灵活性。

引用类型类似于指针,能够引用一个值。

LOB(Large Object)类型的值就是一个LOB定位器,能够指示出大对象的存储位置。目前Oracle支持的LOB类型具体包括四个子类型(Subtype),分别为CLOB、BLOB、NLOB和BFILE。其中,CLOB、BLOB和NLOB都是将数据保存在数据库内部,所以称为内部LOB,而BFILE类型保存的核心是文件指针,真正的文件是保存在数据库外,所以称为外部LOB。

如果处理单行单列的数据那么可以使用标量变量;如果处理单行多列数据那么可以使用PL/SQL记录;如果处理单列多行数据那么可以使用PL/SQL集合。

BOOLEAN数据类型用于定义布尔型(逻辑型)变量,其值只能为TRUE(真)、FALSE(假)或NULL(空)。需要注意的是,该数据类型是PL/SQL数据类型,不能应用于表列。

下图是在PL/SQL中可以使用的预定义类型。

图 3-1 PL/SQL中可以使用的预定义类型

数据类型的作用在于指明存储数值时需要占据的内存空间大小和进行运算的依据。Oracle的字段数据类型如下表所示:

表 3-1 Oracle的字段数据类型

数据类型

描述

VARCHAR2(size)

可变长字符数据。VARCHAR2(n)数据类型用于定义可变长度的字符串,其中,n用于指定字符串的最大长度,n的值必须是正整数且不超过32767。

CHAR(size)

定长字符数据。CHAR(n)数据类型用于定义固定长度的字符串,其中,n用于指定字符串的最大长度,n的值必须是正整数且不超过32767。

NUMBER(p,s)

可变长数值数据。NUMBER(precision,scale)数据类型用于定义固定长度的整数和浮点数,其中,precision表示精度,用于指定数字的总位数;scale表示标度,用于指定小数点后的数字位数,默认值为0,即没有小数位数。

DATE

日期型数据。DATE数据类型用于定义日期时间类型的数据,其数据长度为固定7个字节,分别描述年、月、日、时、分、秒。

LONG

可变长字符数据,最大可达到2G。LONG数据类型在其它的数据库系统中常被称为备注类型,它主要用于存储大量的可以在稍后返回的文本内容。

TIMESTAMP

TIMESTAMP数据类型也用于定义日期时间数据,但与DATE仅显示日期不同,TIMESTAMP类型数据还可以显示时间和上下午标记,如“11-9月-2007 11:09:32.213 AM”。

CLOB

字符数据,最大可达到4G。

RAW和LONG RAW

裸二进制数据。LONG RAW数据类型在其它数据库系统中常被称为大二进制类型(BLOB),它可以用来存储图形、声音视频数据,尽管关系型数据库管理系统最初不是为它们而设计的,但是多媒体数据可以存储在BLOB或LONG RAW类型的字段内。

BLOB

二进制数据,最大可达到4G。

BFILE

存储外部文件的二进制数据,最大可达到4G。

ROWID

行地址,十六进制串,表示行在所在的表中唯一的行地址,该数据类型主要用于返回ROWID伪列,常用在可以将表中的每一条记录都加以唯一标识的场合。

About Me:小麦苗

● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

本文分享自微信公众号 - DB宝(xiaomaimiaolhr)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-11-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MYSQL 8 的 DB security 怎么应对安全部门的 bulabula

    MYSQL 8 的 security 的确是和MYSQL 5.7 不大一样,但具体怎么弄到底和MYSQL 5.7 有什么不一样,还是的搞一搞。什么 还在使用M...

    用户5669671
  • python实战|用scrapy爬取当当网数据

    在上一篇文章中我们介绍了scrapy的一些指令和框架的体系,今天咱们就来实战一下,用scrapy爬取当当网(网站其实大家可以随意找,原理都是一样)的...

    JAVAandPython君
  • 每敲一行代码,需要测试1000次!!!

    此前Oracle 惨遭亚马逊、Salesforce 弃用,究其根本原因,不是因为亚马逊等企业为了省钱,而是因为 Oracle 数据库逐渐满足不了他们业务的发展需...

    用户5224393
  • 循序渐进Oracle:数据库的字符集和字符集文件

    导读:本文来自『墨天轮』专栏“循序渐进Oralcle”(https://www.modb.pro/topic/6289,复制到浏览器中打开或者点击“阅读原文”)...

    数据和云
  • Python可视化工具plotly从数据库读取数据作图示例

    本人在学习使用Python数据可视化工具plotly的过程中,实际的需求是将数据库中的数据展示出来,经过尝试终于完成了第一步,把数据库某列数据取出来,然后再在本...

    八音弦
  • 灵魂拷问:缓存与数据库的双写一致性如何保证?

    分布式缓存是现在很多分布式应用中必不可少的组件,但是用到了分布式缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何...

    黄泽杰
  • 高并发秒杀系统下的个性化问题解决

    前面文章整体介绍了秒杀系统的设计架构原则,在高并发秒杀系统架构下还存在一些个性化问题需要解决。

    春哥大魔王
  • MYSQL show engine innodb status 这么多年,你真的都懂?

    Show engine innodb status 这个命令估计搞MYSQL的听见这个,第一个反应就是烂大街了。这个命令不会你就快回家吧?

    用户5669671
  • 盘点分库分表中,你一定要避开的那些坑!

    例如:单表中出现了,动辄百万甚至千万级别的数据。“分表分库”就成为解决上述问题的有效工具。

    数据和云
  • dotNET Core实现分布式环境下的流水号唯一

    在管理系统中,很多功能模块都会涉及到各种类型的编号,例如:流程编号、订单号、合同编号等等。编号各有各自的规则,但通常有一个流水号来确定编号的唯一性,保证流水号的...

    oec2003

扫码关注云+社区

领取腾讯云代金券