常量
定义常量的语法格式
常量名 constant 类型标识符 [not null]:=值;
常量包括后面的变量名都必须以字母开头不能有空格不能超过个字符长度同时不能和保留字同名常(变)量名称不区分大小写在字母后面可以带数字或特殊字符括号内的not null为可选参数若选用表明该常(变)量不能为空值
实例
在【SQLPlus Worksheet】中执行下列PL/SQL程序该程序定义了名为pi的数字型常量长度为
执行结果如图所示
―――――――――――――――――――――――――――――――――――――
declare
pi constant number():=;
begin
commit;
end;
―――――――――――――――――――――――――――――――――――――
【配套程序位置】第章\constantdefinesql
基本数据类型变量
基本数据类型
PL/SQL中常用的基本数据类型如表所示
表 常见的数据基本类型
类型标识符 说明
Number 数字型
Int 整数型
Pls_integer 整数型产生溢出时出现错误
Binary_integer 整数型表示带符号的整数
Char 定长字符型最大个字符
Varchar 变长字符型最大个字符
Long 变长字符型最长GB
Date 日期型
Boolean 布尔型(TRUEFALSENULL三者取一)
在PL/SQL中使用的数据类型和Oracle数据库中使用的数据类型有的含义是完全一致的有的是有不同的含义的
基本数据类型变量的定义方法
变量名 类型标识符 [not null]:=值;
实例
在【SQLPlus Worksheet】中执行下列PL/SQL程序该程序定义了名为age的数字型变量长度为初始值为执行结果如图所示
―――――――――――――――――――――――――――――――――――――
declare
age number():=;
begin
commit;
end;
―――――――――――――――――――――――――――――――――――――
【配套程序位置】第章\basicdatatypedefinesql
复合数据类型变量
下面介绍常见的几种复合数据类型变量的定义
使用%type定义变量
为了让PL/SQL中变量的类型和数据表中的字段的数据类型一致Oracle i提供了%type定义方法这样当数据表的字段类型修改后PL/SQL程序中相应变量的类型也自动修改
在【SQLPlus Worksheet】中执行下列PL/SQL程序该程序定义了名为mydate的变量其类型和tempusertesttable数据表中的currentdate字段类型是一致的
执行结果如图所示
―――――――――――――――――――――――――――――――――――――
Declare
mydate tempusertesttablecurrentdate%type;
begin
commit;
end;
―――――――――――――――――――――――――――――――――――――
【配套程序位置】第章\typedefinesql
定义记录类型变量
很多结构化程序设计语言都提供了记录类型的数据类型在PL/SQL中也支持将多个基本数据类型捆绑在一起的记录数据类型
下面的程序代码定义了名为myrecord的记录类型该记录类型由整数型的myrecordnumber和日期型的mycurrentdate基本类型变量组成srecord是该类型的变量引用记录型变量的方法是记录变量名基本类型变量名
程序的执行部分从tempusertesttable数据表中提取recordnumber字段为的记录的内容存放在srecord复合变量里然后输出srecordmycurrentdate的值实际上就是数据表中相应记录的currentdate的值
在【SQLPlus Worksheet】中执行下列PL/SQL程序执行结果如图所示
―――――――――――――――――――――――――――――――――――――
set serveroutput on
declare
type myrecord is record(
myrecordnumber int
mycurrentdate date);
srecord myrecord;
begin
select * into srecord from tempusertesttable where recordnumber=;
dbms_outputput_line(srecordmycurrentdate);
end;
―――――――――――――――――――――――――――――――――――――
【配套程序位置】第章\ recordtypedefinesql
在PL/SQL程序中select语句总是和into配合使用into子句后面就是要被赋值的变量
使用%rowtype定义变量
使用%type可以使变量获得字段的数据类型使用%rowtype可以使变量获得整个记录的数据类型比较两者定义的不同变量名 数据表列名%type变量名 数据表%rowtype
在【SQLPlus Worksheet】中执行下列PL/SQL程序该程序定义了名为mytable的复合类型变量与testtable数据表结构相同执行结果如图所示
―――――――――――――――――――――――――――――――――――――
Declare
mytable testtable%rowtype;
begin
select * into mytable
from tempusertesttable
where recordnumber=;
dbms_outputput_line(mytablecurrentdate);
end;
―――――――――――――――――――――――――――――――――――――
【配套程序位置】第章\ rowtypedefinesql
定义一维表类型变量
表类型变量和数据表是有区别的定义表类型变量的语法如下
―――――――――――――――――――――――――――――――――――――
type 表类型 is table of 类型 index by binary_integer;
表变量名 表类型;
―――――――――――――――――――――――――――――――――――――
类型可以是前面的类型定义index by binary_integer子句代表以符号整数为索引这样访问表类型变量中的数据方法就是表变量名(索引符号整数)
在【SQLPlus Worksheet】中执行下列PL/SQL程序该程序定义了名为tabletype和tabletype的两个一维表类型相当于一维数组table和table分别是两种表类型变量
执行结果如图所示
―――――――――――――――――――――――――――――――――――――
Declare
type tabletype is table of varchar() index by binary_integer;
type tabletype is table of tempusertesttablerecordnumber%type index by binary_integer;
table tabletype;
table tabletype;
begin
table():=大学;
table():=大专;
table():=;
table():=;
dbms_outputput_line(table()||table());
dbms_outputput_line(table()||table());
end;
―――――――――――――――――――――――――――――――――――――
【配套程序位置】第章\ tabletypedefinesql
||是连接字符串的运算符
定义多维表类型变量
在【SQLPlus Worksheet】中执行下列PL/SQL程序该程序定义了名为tabletype的多维表类型相当于多维数组table是多维表类型变量将数据表tempusertesttable中recordnumber为的记录提取出来存放在table中并显示执行结果如图所示
―――――――――――――――――――――――――――――――――――――
Declare
type tabletype is table of testtable%rowtype index by binary_integer;
table tabletype;
begin
select * into table()
from tempusertesttable
where recordnumber=;
dbms_outputput_line(table()recordnumber||table()currentdate);
end;
―――――――――――――――――――――――――――――――――――――
【配套程序位置】第章\ tabletypedefinesql
在定义好的表类型变量里可以使用countdeletefirstlastnextexists和prior等属性进行操作使用方法为表变量名属性返回的是数字
在【SQLPlus Worksheet】中执行下列PL/SQL程序该程序定义了名为tabletype的一维表类型table是一维表类型变量变量中插入个数据综合使用了表变量属性
执