(三)PL/SQL数据类型

PL/SQL注释

程序注释是解释性说明,可以包括自己编写的,并帮助任何人阅读源代码的PL/SQL代码。所有的编程语言允许某种形式的注释。
在PL/SQL支持单行和多行注释。任何注释里面所有字符都会被PL/SQL编译器忽略。在PL/SQL单行注释使用分隔符 - (双连字符)和多行注释被 /* 和 */ 括起来。

DECLARE
   -- variable declaration
   message  varchar2(20):= 'Hello, World!';BEGIN
   /*
    *  PL/SQL executable statement(s)
    */
   dbms_output.put_line(message);END;/

PL/SQL程序单元

PL/SQL 块
函数包
包体
过程
触发器
类型
类型体

PL/SQL变量,常量和参数都必须有一个有效的数据类型,指定存储格式,约束和值的有效范围。

分类描述
标量单值没有内部组件,如NUMBER, DATE 或 BOOLEAN
大对象(LOB)指向其他数据项,如文本,图形图像,视频剪辑和声音等存储大对象
复合具有可单独访问的内部组件的数据项。例如,集合和记录
引用指向其他数据项

PL/SQL标量数据类型和子类型

PL/SQL标量数据类型和子类型受到以下几大类:

数据类型描述
数字在其上执行的算术运算的数值
字符代表单个字符或字符的字母数字字符串值
布尔在其上执行的逻辑运算的逻辑值
日期时间日期和时间

PL/SQL提供的数据类型的子类型。例如,数据类型数有一个叫作INTEGER的子类型。可以使用子类型在PL/SQL程序中,使数据类型与其他程序中的数据类型兼容,而嵌入PL/SQL代码在另一个程序,如Java程序。

PL/SQL数值数据类型和子类型

以下是PL/ SQL预定义的数字数据类型及其子类型的详细信息:

数据类型描述
PLS_INTEGER通过2,147,483,647到-2147483648范围内有符号整数,以32位表示
BINARY_INTEGER通过2,147,483,647到-2147483648范围内的有符号整数,以32位表示
BINARY_FLOAT单精度IEEE 754格式的浮点数
BINARY_DOUBLE双精度IEEE 754格式的浮点数
NUMBER(prec, scale)定点或浮点数在范围1E-130至(但不包括)绝对值1.0E126。 NUMBER变量也可以表示0
DEC(prec, scale)ANSI具体的定点类型使用38位小数最大精度
DECIMAL(prec, scale)IBM特定的固定点型具有38位小数最大精度
NUMERIC(pre, secale)浮点类型具有38位小数最大精度。
DOUBLE PRECISION具有126个二进制数字最大精度ANSI特定浮点型(约38位十进制数)
FLOAT具有126个二进制数字(约38位十进制数)最大精度ANSI和IBM特定的浮点型
INT具有38位小数最大精度ANSI具体的整数类型
INTEGERANSI和IBM的38位小数最大精度具体的整数类型
SMALLINTANSI和IBM的38位小数最大精度具体的整数类型
REAL具有63位二进制数字最大精度浮点型(大约18位小数)

栗子

DECLARE
   num1 INTEGER;
   num2 REAL;
   num3 DOUBLE PRECISION;
BEGIN
   null;
END;
/

PL/SQL字符数据类型和子类型

以下是PL/SQL预定义的字符数据类型及其子类型的详细信息:

数据类型描述
CHAR具有32,767个字节的最大尺寸固定长度字符串
VARCHAR2具有32,767个字节的最大尺寸变长字符串
RAW可变长度的二进制或字节字符串的32,767个字节的最大尺寸,而不是由PL/ SQL解释
NCHAR具有32,767个字节的最大尺寸的固定长度国家字符串
NVARCHAR2具有32,767个字节的最大尺寸可变长度国家字符串
LONG具有32,760字节最大尺寸变长字符串
LONG RAW可变长度的二进制或字节字符串的32,760字节的最大尺寸,而不是由PL/SQL解释
ROWID物理行标识符,一行在一个普通的表中的地址
UROWID物理通用行标识符(物理,逻辑,或外国的行标识符)

PL/SQL布尔数据类型

在逻辑操作中使用布尔数据类型存储的逻辑值。逻辑值为:true 和 false 的布尔值以及 NULL 值。
但是,SQL没有数据类型等同于布尔。因此,布尔值不能用于:

1.SQL语句
2.内置SQL函数(如to_char)
3.从SQL语句调用PL/SQL函数

PL/SQL日期时间和间隔类型

DATE数据类型存储固定长度的日期时间,其中包括每天在几秒钟内从午夜开始的时间。有效的日期范围从公元前4712年1月1日至999912月31日。

默认的日期格式由Oracle初始化参数NLS_DATE_FORMAT设置。例如,默认的可以是“DD-MON-YY’,它包括一个两位数字的月份中的日期,月份名称的缩写,以及年的最后两位数字,例如,01- OCT-12。

每个日期,包括世纪,年,月,日,时,分,秒。下表显示了每个字段的有效值:

字段名称有效日期时间值有效的间隔值
YEAR-4712 to 9999 (年除外 0)任何非零整数
MONTH01 to 120 to 11
DAY01 to 31 (受制于年份和月份的数值,按日历的区域设置的规则)任何非零整数
HOUR00 to 230 to 23
MINUTE00 to 590 to 59
SECOND00 to 59.9(n), 其中,9(n)是时间小数秒精度0 to 59.9(n), 其中,9(n)是区间小数秒精度
TIMEZONE_HOUR-12 to 14 (范围可容纳夏令时更改)不适用
TIMEZONE_MINUTE00 to 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用户定义的子类型

子类型是另一种数据类型,这是所谓的基本类型的子集。 子类型具有其基本类型相同的操作,但其只是有效值的一个子集。

PL/SQL预定义了一些子类型的封装标准。例如,PL/SQL预定义的子类型

CHARACTERINTEGER如下:
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;
/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值