codecamp

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'。空可以分配,但它不能与任何东西等同,包括它本身。


PL / SQL函数
PL / SQL游标
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }