在本章中,无涯教程将讨论PL/SQL中的数据类型。PL/SQL变量,常量和参数必须具有有效的数据类型,该数据类型指定存储格式,约束和值的有效范围,在本章中,无涯教程将重点介绍 SCALAR 和 LOB 数据类型。其他两种数据类型将在其他章节中介绍。
S.No | Category & 描述 |
---|---|
1 | Scalar 没有内部组成部分的单个值,如 NUMBER,DATE,或 BOOLEAN 。 |
2 | Large Object(LOB) 指向与其他数据项(如,文本,图形图像)分开存储的大对象的指针。 |
3 | Composite 具有内部组件的数据项可以单独访问,如,收集和记录。 链接:https://www.learnfk.comhttps://www.learnfk.com/plsql/plsql-data-types.html 来源:LearnFk无涯教程网 |
4 | Reference 指向其他数据项的指针。 |
S.No | Date Type & 描述 |
---|---|
1 | Numeric 在其上执行算术运算的数值。 |
2 | Character 代表单个字符或字符串的字母数字值。 |
3 | Boolean 在其上执行逻辑操作的逻辑值。 |
4 | Datetime 日期和时间。 |
PL/SQL提供数据类型的子类型,数据类型NUMBER的子类型为INTEGER,您可以在PL/SQL程序中使用子类型,以使数据类型与其他程序中的数据类型兼容,同时将PL/SQL代码嵌入到其他程序(如Java程序)中。
下表列出了PL/SQL预定义数字数据类型及其子类型-
S.No | Data Type & 描述 |
---|---|
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) 绝对值在1E-130到(但不包括)1.0E126范围内的定点或浮点数。 NUMBER变量也可以表示0 |
6 | DEC(prec,scale) ANSI特定的定点类型,最大精度为38个十进制数字 |
7 | DECIMAL(prec,scale) IBM特定的定点类型,最大精度为38个十进制数字 |
8 | NUMERIC(pre,secale) 浮点型,最大精度为38位十进制数字 |
9 | DOUBLE PRECISION 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 | Data Type & 描述 |
---|---|
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 物理行标识符,普通表中的行地址 |
9 | UROWID 通用行标识符(物理,逻辑或外部行标识符) |
BOOLEAN 数据类型存储逻辑操作中使用的逻辑值,逻辑值是布尔值 TRUE 和 FALSE 和值 NULL 。
但是,SQL没有与BOOLEAN等效的数据类型,因此,布尔值不能用于-
DATE 数据类型用于存储固定长度的日期时间,其中包括自午夜以来的秒数,有效日期范围为公元前4712年1月1日至公元9999年12月31日。
每个DATE包括世纪,年,月,日,小时,分钟和秒,下表显示了每个字段的有效值-
字段名称 | 有效的日期时间值 | 有效间隔值 |
---|---|---|
YEAR | -4712至9999(不包括0年) | 任何非零整数 |
MONTH | 01至12 | 0到11 |
DAY | 01到31(根据地区日历的规则,由MONTH和YEAR的值限制) | 任何非零整数 |
HOUR | 00至23 | 0到23 |
MINUTE | 00至59 | 0到59 |
SECOND | 00到59.9(n),其中9(n)是时间分数秒的精度 | 0到59.9(n),其中9(n)是间隔小数秒的精度 |
TIMEZONE_HOUR | -12至14(该范围可适应夏令时更改) | 不适用 |
TIMEZONE_MINUTE | 00至59 | 不适用 |
大对象(LOB)数据类型是指大数据项,如文本,图形图像, LOB数据类型允许对此数据进行高效,随机,分段访问。以下是预定义的PL/SQL LOB数据类型-
数据类型 | 说明 | 大小 |
---|---|---|
BFILE | 用于将大型二进制对象存储在数据库外部的操作系统文件中。 | 取决于系统。不能超过4 GB。 |
BLOB | 用于在数据库中存储大型二进制对象。 | 8至128 TB(TB) |
CLOB | 用于在数据库中存储大块字符数据。 | 8到128 TB |
NCLOB | 用于在数据库中存储大块NCHAR数据。 | 8到128 TB |
子类型是另一种数据类型的子集,称为其基本类型,子类型与其基本类型具有相同的有效操作,但仅是其有效值的子集。
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'不同。可以分配空值,但不能将其等同于任何事物,包括自身。
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)