PL / SQL数据类型
PL / SQL变量,常量和参数都必须有一个有效的数据类型,它指定了存储格式,约束和价值观的有效范围。本教程将带您在PL / SQL和其他两种数据类型提供标量和LOB数据类型将在其他章节覆盖。
| 类别 | 描述 |
|---|---|
| 纯量 | 没有内部部件,如数字,日期或布尔单个值。 |
| 大对象(LOB) | 指针从其他数据项,诸如文本,图像,视频剪辑和声音波形分开储存大对象。 |
| 综合 | 具有可单独访问的内部组件的数据项。例如,收集和记录。 |
| 参考 | 指向其他数据项。 |
PL / SQL标量数据类型和子类型
PL / SQL标量数据类型及亚型受到以下几大类:
| 日期类型 | 描述 |
|---|---|
| 数字 | 在其上执行的算术运算的数值。 |
| 字符 | 代表单个字符或字符字符串字母数字值。 |
| 布尔 | 在其上执行的逻辑运算的逻辑值。 |
| 约会时间 | 日期和时间。 |
PL / SQL提供的数据类型的子类型。例如,数据类型NUMBER有一个名为INTEGER亚型。您可以使用亚型在PL / SQL程序,使数据类型与在其他程序中的数据类型兼容,而在另一个程序中嵌入PL / SQL代码,比如Java程序。
PL / SQL数字数据类型和子类型
以下是PL / SQL预定义的数字数据类型及其子类型的详细信息:
| 数据类型 | 描述 |
|---|---|
| PLS_INTEGER | 通过在2,147,483,647 2,147,483,648范围内有符号整数,以32位代表 |
| BINARY_INTEGER | 通过在2,147,483,647 2,147,483,648范围内有符号整数,以32位代表 |
| BINARY_FLOAT | 单精度IEEE 754格式的浮点数 |
| BINARY_DOUBLE | 双精度IEEE 754格式的浮点数 |
| NUMBER(PREC,刻度) | 定点或浮点数字与在范围1E-130(但不包括)绝对值1.0E126。有多个变量也可以代表0。 |
| DEC(PREC,刻度) | ANSI特定的固定点类型具有38位十进制数字最大精度。 |
| DECIMAL(PREC,刻度) | IBM特定的固定点类型具有38位十进制数字最大精度。 |
| NUMERIC(预,黑麦) | 浮动式与38位十进制数字最大精度。 |
| DOUBLE PRECISION | ANSI特定浮点型与126位二进制数字最大精度(约38位十进制数) |
| 浮动 | ANSI和IBM特定的浮点型与126个二进制位(约38位十进制数字)最大精度 |
| INT | ANSI特定整数类型具有38位十进制数字最大精度 |
| 整数 | ANSI和IBM特定整数类型具有38位十进制数字最大精度 |
| SMALLINT | ANSI和IBM特定整数类型具有38位十进制数字最大精度 |
| 真实 | 浮点型与63位二进制数字最大精度(约18位十进制数) |
下面是一个有效的声明:
DECLARE num1 INTEGER; num2 REAL; num3 DOUBLE PRECISION; BEGIN null; END; /
当上述代码被编译和执行时,它产生了以下结果:
PL/SQL procedure successfully completed
PL / SQL字符数据类型和子类型
以下是PL / SQL预先定义的字符数据类型和其子类型的细节:
| 数据类型 | 描述 |
|---|---|
| CHAR | 定长字符串的32,767个字节的最大大小 |
| VARCHAR2 | 变长字符串的32,767个字节的最大大小 |
| 生的 | 可变长度的二进制或字节字符串32,767字节的最大容量,不是由PL / SQL解释 |
| NCHAR | 固定长度的民族性格字符串的32,767个字节的最大大小 |
| NVARCHAR2 | 可变长度民族性字符串的32,767个字节的最大大小 |
| 长 | 变长字符串的32,760字节的最大尺寸 |
| LONG RAW | 可变长度的二进制或字节字符串的32,760字节的最大容量,不是由PL / SQL解释 |
| ROWID | 物理行标识符,行的在一个普通的表的地址 |
| UROWID | 环球行标识符(物理,逻辑或外国行标识符) |
PL / SQL布尔数据类型
这在逻辑操作中使用布尔数据类型存储逻辑值。逻辑值是布尔值的真假NULL值。
但是,SQL没有数据类型等同于布尔。因此,逻辑值不能用于:
SQL语句
内置SQL函数(例如TO_CHAR)
从SQL语句调用PL / SQL函数
PL / SQL datetime和间隔类型
日期数据类型来存储固定长度的日期时间,其中包括从午夜开始一天的秒数。有效日期范围为4712年1月1 BC到12月31日,公元9999。
默认的日期格式是由Oracle初始化参数NLS_DATE_FORMAT设定。例如,默认的可以是“DD-MON-YY',其包括用于该月的一天的两位数字,月份名称的缩写,和年的最后两位数字,例如,01- OCT-12。
每个日期包括世纪,年,月,日,小时,分钟和秒。下表显示了每个字段的有效值:
| 字段名称 | 有效日期时间值 | 有效的时间间隔值 |
|---|---|---|
| 年 | -4712〜9999(不含一年0) | 任何非零整数 |
| 月 | 01到12 | 0至11 |
| 天 | 01到31(按年份和月份的数值限制,根据日历区域设置的规则) | 任何非零整数 |
| 小时 | 00〜23 | 0到23 |
| 分钟 | 00〜59 | 0到59 |
| 第二 | 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 | 不适用 |
PL / SQL大型对象(LOB)数据类型
大对象(LOB)数据类型是指大到数据项,如文本,图像,视频剪辑和声音波形。 LOB数据类型实现高效,随机,分段对这些数据的访问。以下是预定义的PL / SQL LOB数据类型:
| 数据类型 | 描述 | 尺寸 |
|---|---|---|
| BFILE | 用于大型二进制对象存储在运行数据库以外的系统文件。 | 依赖于系统的。不能超过4千兆字节(GB)。 |
| BLOB | 用于大型二进制对象存储在数据库中。 | 8至128千兆字节(TB) |
| CLOB | 用于字符大块数据存储在数据库中。 | 8至128 TB |
| NCLOB | 用于NCHAR大块数据存储在数据库中。 | 8至128 TB |
PL / SQL用户定义的亚型
A亚型是另一种数据类型,这是所谓的基本类型的子集。 A亚型具有相同的有效操作作为其基底的类型,但只有其有效值的子集。
PL / SQL预定义的配套标准若干亚型。例如,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
的PL / SQL空值表示缺失的或未知的数据和它们不是一个整数,字符,或任何其他特定的数据类型。注意,NULL不是相同空数据串或空字符值' 0'。空可以分配,但它不能与任何东西等同,包括它本身。