在本章中,我们将讨论PL/SQL中的数据类型. PL/SQL变量,常量和参数必须具有有效的数据类型,该类型指定存储格式,约束和有效的值范围.我们将在本章重点介绍 SCALAR 和 LOB 数据类型.其他两种数据类型将在其他章节中介绍.
S.No | 类别&描述 |
---|---|
1 | 标量 没有内部组件的单个值,例如 NUMBER,DATE,或 BOOLEAN . |
2 | 大对象(LOB) 指向单独存储的大对象的指针来自其他数据项,例如文本,图形图像,视频剪辑和声音波形. |
3 | 复合 数据具有可单独访问的内部组件的项目.例如,集合和记录. |
4 | 参考 指向其他数据项的指针. |
PL/SQL标量数据类型和子类型属于以下类别 :
S.No | 日期类型&描述 |
---|---|
1 | 数字 执行算术运算的数值. |
2 | 字符 表示单个字符或字符串的字母数字值. |
3 | 布尔 执行逻辑运算的逻辑值. |
4 | 日期时间 日期和时间. |
PL/SQL提供数据类型的子类型.例如,数据类型NUMBER具有名为INTEGER的子类型.您可以使用PL/SQL程序中的子类型使数据类型与其他程序中的数据类型兼容,同时将PL/SQL代码嵌入到另一个程序中,例如Java程序.
下表列出了PL/SQL预定义数值数据类型及其子类型 :
S.No | 数据类型&描述 |
---|---|
1 | PLS_INTEGER 有符号整数,范围为-2,147,483,648到2,147,483,647,以32位表示 |
2 | BINARY_INTEGER 有符号整数,范围为-2,147,483,648到2,147,483,647,以32位表示 |
3 | BINARY_FLOAT 单精度IEEE 754格式浮点数 |
4 | BINARY_DOUBLE 双精度IEEE 754格式浮点数 |
5 | NUMBER(prec,scale) 固定ed-point或浮点数,绝对值范围为1E-130到(但不包括)1.0E126. NUMBER变量也可以表示0 |
6 | DEC(预定,比例) ANSI特定定点类型,最大值精度为38位十进制数 |
7 | DECIMAL(prec,scale) IBM特定定点类型,最大精度为38位小数 |
8 | NUMERIC(pre,secale) 最大精度为38位十进制数的浮动类型 |
9 | 双精度 ANSI特定浮点类型,最大精度为126位二进制数字(约38位小数) |
10 | FLOAT ANSI和IBM特定的浮点类型最大精度为126位二进制数字(约38位十进制数字) |
11 | INT ANSI特定整数类型,最大精度为38位小数 |
12 | INTEGER ANSI和IBM特定的整数类型,最大值精度为38位十进制数 |
13 | SMALLINT ANSI和IBM特定的整数类型,最大值精度为38位十进制数 |
14 | REAL 浮点类型,最大精度为63个二进制数字(大约18个十进制数字) |
以下是有效声明 :
DECLARE num1 INTEGER; num2 REAL; num3 DOUBLE PRECISION; BEGIN null; END; /
编译并执行上述代码时,会产生以下结果 :
PL/SQL procedure successfully completed
以下是PL/SQL预定义字符数据类型及其子类型的详细信息 :
S.No | 数据类型和描述 |
---|---|
1 | CHAR 最大尺寸的定长字符串32,767字节 |
2 | VARCHAR2 最大尺寸的可变长度字符串32,767字节 |
3 | RAW 可变长度二进制或字节字符串最大大小为32,767字节,不由PL/SQL解释 |
4 | NCHAR 固定长度的国家字符串,最大值大小为32,767字节 |
5 | NVARCHAR2 可变长度的国家字符串,最大值大小为32,767字节 |
6 | LONG 最大尺寸的可变长度字符串32,760字节 |
7 | LONG RAW 可变长度的二进制或字节字符串最大大小为32,760字节,不由PL/SQL解释 |
8 | ROWID 物理行标识符,a的地址普通表中的行 |
9 | UROWID 通用行标识符(物理,逻辑,或外国行标识符) |
BOOLEAN 数据类型存储逻辑运算中使用的逻辑值.逻辑值是布尔值 TRUE 和 FALSE 和value NULL .
但是,SQL没有与BOOLEAN等效的数据类型.因此,布尔值不能用于 :
SQL语句
内置SQL函数(例如 TO_CHAR )
从SQL语句调用的PL/SQL函数
DATE 数据类型用于存储固定长度的日期时间,其中包括自午夜起的时间(以秒为单位).有效日期范围为公元前4712年1月1日至公元9999年12月31日.
默认日期格式为由Oracle初始化参数NLS_DATE_FORMAT设置.例如,默认值可能是"DD-MON-YY",其中包括月份日期的两位数字,月份名称的缩写以及年份的最后两位数字.例如,01-OCT-12.
每个日期包括世纪,年,月,日,小时,分钟和秒.下表显示了每个字段的有效值 :
字段名称 | 有效日期时间值 | 有效间隔值 |
---|---|---|
年 | -4712到9999(不包括第0年) | 任何非零整数 |
MONTH | 01到12 | 0到11 |
DAY | 01到31(根据区域设置的日历规则,受MONTH和YEAR的值限制) | 任何非零整数 |
HOUR | 00到23 | 0到23 |
MINUTE | 00到59 | |
SECOND | 00到59.9(n),其中9(n)是时间小数秒的精度 | 0到59.9(n),其中9(n)是区间小数秒的精度 |
TIMEZONE_HOUR | -12到14(范围适应夏令时变化) | 不适用 |
TIMEZONE_MINUTE | 00到59 | 不适用 |
TIMEZONE_REGION | 在动态效果视图中找到V $ TIMEZONE_NAMES | 不适用 |
TIMEZONE_ABBR | 在动态效果视图中找到V $ TIMEZONE_NAMES | 不适用 |
大对象(LOB)数据类型指的是大型数据项,如文本,图形图像,视频剪辑和声音波形.LOB数据类型允许对此数据进行高效,随机,分段访问.以下是预定义的PL/SQL LOB数据类型 :
数据类型 | 描述 | 大小 |
---|---|---|
BFILE | 用于在数据库外的操作系统文件中存储大型二进制对象. | 系统相关.不能超过4千兆字节(GB). |
BLOB | 用于在数据库中存储大型二进制对象. | 8到128太字节(TB) |
CLOB | 用于在数据库中存储大块字符数据. | 8到128 TB |
NCLOB | 用于在数据库中存储大块NCHAR数据. | 8到128 TB |
子类型是另一个数据的子集type,它被称为基类型.子类型与其基类型具有相同的有效操作,但只有其有效值的子集.
PL/SQL预定义包中的几个子类型 STANDARD .例如,PL/SQL预定义子类型 CHARACTER 和 INTEGER ,如下 :
SUBTYPE CHARACTER IS CHAR; SUBTYPE INTEGER IS NUMBER(38,0);
您可以定义和使用您自己的子类型.以下程序说明了定义和使用用户定义的子类型 :
DECLARE SUBTYPE name IS char(20); SUBTYPE message IS varchar2(100); salutation name; greetings message; BEGIN salutation := 'Reader '; greetings := 'Welcome to the World of PL/SQL'; dbms_output.put_line('Hello ' || salutation || greetings); END; /
当在SQL提示符下执行上述代码时,它会产生以下结果 :
Hello Reader Welcome to the World of PL/SQL PL/SQL procedure successfully completed.
PL/SQL NULL值表示缺失或未知数据并且它们不是整数,字符或任何其他特定数据类型.请注意, NULL 与空数据字符串或空字符值'\0'不同.可以指定null,但不能将其等同于任何东西,包括它自己.