PL/SQL 专题
您的位置:database > PL/SQL专题 > PL/SQL数据类型
PL/SQL数据类型
作者:--    发布时间:2019-11-20

在本章中,我们将讨论和学习pl/sql中的数据类型。 pl/sql变量,常量和参数必须具有有效的数据类型,它指定存储格式,约束和有效的值范围。本节将重点介绍scalarlob数据类型。其他两个数据类型(复合类型和引用类型)将在后面的章节中介绍。

  • 标量(scalar)类型 - 它是没有内部组件的单个值,例如:numberdateboolean等。
  • 大对象(lob)类型 - 指向与其他数据项(例如:文本,图形图像,视频剪辑和声音波形)分开存储的大对象的指针。
  • 复合类型 - 具有可单独访问的内部组件的数据项。例如,集合和记录。
  • 引用类型 - 指向其他数据项。

pl/sql标量数据类型和子类型

pl/sql标量数据类型和子类型分为以下几类:

序号 类型 描述
1 数字 执行算术运算的数值。
2 字符 表示单个字符或字符串的字母数字值。
3 布尔 执行逻辑运算的逻辑值。
4 日期时间 用于表示日期和时间的值

pl/sql提供了数据类型的子类型。例如,number数据类型具有一个叫作integer的子类型。 您可以使用pl/sql程序中的子类型将数据类型与其他程序中的数据类型兼容,同时将pl/sql代码嵌入到另一个程序(如java程序)中。

pl/sql数值数据类型和子类型

下表列出了pl/sql预定义的数字数据类型及其子类型 -

序号 类型 描述
1 pls_integer 带符号整数:-2,147,483,6482,147,483,647,以32位表示
2 binary_integer 带符号整数:-2,147,483,6482,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位二进制数字(约十八位数)

以下是有效的声明 -

declare 
   num1 integer; 
   num2 real; 
   num3 double precision; 
begin 
   null; 
end; 
/

当上述代码编译和执行时,它产生以下结果 -

pl/sql procedure successfully completed

pl/sql字符数据类型和子类型

以下是pl/sql预定义字符数据类型及其子类型的详细信息 -

序号 类型 描述
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 通用行标识符(物理,逻辑或外部行标识符)

pl/sql布尔数据类型

boolean数据类型存储逻辑运算中使用的逻辑值。逻辑值为布尔值:true,false以及null值。

但是,sql没有类似于boolean的数据类型。 因此,布尔值不能用于 -

  • sql语句
  • 内置sql函数(如:to_char)
  • 从sql语句调用pl/sql函数

pl/sql日期时间和间隔类型

date数据类型用于存储固定长度的数据日期时间,其包括自午夜以来以秒为单位的时间。 有效期为公元前4712年1月1日至公元9999年12月31日。

默认日期格式由oracle初始化参数nls_date_format设置。 例如,默认值可能是“dd-mon-yy”,其中包括一个月份的两位数字,月份名称的缩写以及年份的最后两位数字。 例如,01-oct-12

每个date类型的数据值包括世纪,年,月,日,时,分,秒。下表显示每个字段的有效值 -

字段名 有效的日期时间值 有效间隔值
year -47129999(不包括第0年) 任意非零整数
month 01 ~ 12 01 ~ 11
day 0131(限于monthyear的值,根据本地日历的规则) 任何非零整数
hour 00 ~ 23 00 ~ 23
minute 00 ~ 59 00 ~ 59
second 00 ~ 59.9(n),其中9(n)是时间分秒的精度 00 ~ 59.9(n),其中9(n)是间隔分数秒的精度
timezone_hour -1214(范围适应夏令时更改) 不适用
timezone_minute 00 ~ 59 不适用
timezone_region 在动态性能视图v$timezone_names找到 不适用
timezone_abbr 在动态性能视图v$timezone_names找到 不适用

pl/sql大对象(lob)数据类型

大对象(lob)数据类型指的是大数据项,如文本,图形图像,视频剪辑和声音波形。 lob数据类型允许对数据进行高效,随机,分段访问。以下是预定义的pl/sql lob数据类型 -

数据类型 描述 大小
bfile 用于在数据库外的操作系统文件中存储大型二进制对象。 取决于系统,但不得超过4gb
blob 用于在数据库中存储的大型二进制对象 8tb128tb
clob 用于在数据库中存储大字符数据。 8tb128tb
nclob 用于在数据库中存储大块nchar数据。 8tb128tb

pl/sql用户定义的子类型

子类型是另一种数据类型的子集,它称为基本类型。子类型具有与其基本类型相同的操作,但只有基本类型有效值的子集。

pl/sql预定义包standard中的几个子类型。 例如,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; 
/

当上述代码在sql提示符下执行时,它会产生以下结果 -

hello reader welcome to the world of pl/sql 

pl/sql procedure successfully completed.

pl/sql中的null

pl/sql中的null值表示丢失或未知数据,它们不是整数,字符或任何其他特定数据类型。 请注意,null与空数据字符串或空字符值\0不同。可以将一个null值分配给其它变量,但不能等同于任何东西,包括其自身(null)。


网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册