2018-12-04
PL\SQL程序块由三个部分组成:声明部分、执行部分、异常处理部分。
其结构如下:
declare
/*声明部分:说明要用到得变量,类型及游标,以及局部存储过程和函数*/
/*变量的定义和系统保留字要区分开(sql server 中可用@ PL\SQL不能用@)*/
begin
/*执行部分:过程及SQL语句*/
/*必须有*/
exception
/*异常处理部分:错误处理*/
end;
PL/SQL中除了一些常见的变量类型外,还有复合类型
复合类型分为记录和表
记录:由单行多列的标量构成的复合结构。可以看做是一种用户自定义数据类型。将一个或多个标量封装成一个对象进行操作。是一种临时复合对象类型。
语法:
type record_type is record(
Field1 type1 [not null] [:= exp1],
Field1 type1 [not null] [:= exp2],
...
Fieldn typen [not null] [:= expn]);
其中可以用%type和%rowtype 来为声明的变量快速指明类型。
%type——使其对应的变量类型与已经定义好的某个数据变量的类型相同
%rowtype——返回一个记录类型,其数据类型和数据库表的数据结构相同
表:使用记录类型变量只能保存一行数据,这限制了select返回行数,如果SELECT语句返回多行就会错。Oracle提供了另外一种自定义类型,也就是 表类型,它是对记录类型的扩展,允许处理多行数据,类似于表。
语法:
type type_name is table of table%rowtype [index by binary_integer];
例子1:
结果:
在这个例子中注意:声明部分类似JAVA中的类——先定义一个类,然后定义一个它的对象
执行部分:select —into—from—where 从表中选择一个合适的记录,然后赋值给into后的记录类型变量
例子2:
结果:
在例子2中,C_course%rowtype——说明表类型变量course_table_type的数据类型和C_course表的数据结构相同
index by binary_integer——指定系统创建一个主键索引,用于引用表类型变量中的特定行
/*有这个后面的my_table(1)和my_table(2)才有意义*/
创建表类型变量的意义就如上面提到的一样,在于处理多行数据。
原文地址:https://www.cnblogs.com/109-379-4468/p/10068229.html