PL/SQL之复合类型详解

来源:互联网 发布:excel表格数据分类汇总 编辑:程序博客网 时间:2024/05/19 04:26

PL/SQL中,除了基本类型外,还有一种类型叫做复合类型。

1.记录类型

记录类型把逻辑相关的,分离的,基本数据类型的变量组成一个整体存储起来,必须包括至少一个标量型或RECORD类型成员。

作用是存放互不相同但逻辑相关的信息。在使用记录类型时,需要现在声明部分定义好记录的组成,记录的变量,然后在执行部分

引用记录的变量或成员。

记录类型定义的语法:

TYPE record_name IS RECORD(     v1 data_type1 [not null] [:= default_value],     v2 data_type2 [not null] [:= default_value],     ......     vn data_typen [not null] [:= default_value]);

实例体会一切:

DECLARE   --声明部分  --定义记录类型  TYPE test_record IS RECORD(       name VARCHAR2(50) NOT NULL := 'my test',--:=是pl/sql中赋值语句       detail VARCHAR2(300)  );  --声明一个变量,为记录类型  record_book test_record;BEGIN  --执行部分  record_book.name := '调用记录类型中的成员';  record_book.detail := '调用另外一个成员';  --输出  DBMS_OUTPUT.PUT_LINE(record_book.name);  DBMS_OUTPUT.PUT_LINE(record_book.detail);END;--结束

使用SELECT对记录类型赋值,只需保证记录字段与查询字段相匹配:

第一步,建表,插入数据:

create table mytest(    id number(3),    name varchar2(20),    age number(3)  );  insert into mytest values(1,'one',18);  insert into mytest values(2,'two',20);  insert into mytest values(3,'three',24);  commit;
第二步,使用SELECT赋值实际操作:

DECLARE   --声明部分  TYPE ts_record IS RECORD(       name mytest.name%TYPE,--%TYPE表示name的类型与mytest.name的类型一致       age mytest.age%TYPE  );  record_book ts_record;BEGIN  --执行部分  SELECT name,age INTO record_book   FROM mytest WHERE id = 1;  DBMS_OUTPUT.PUT_LINE(record_book.name);  DBMS_OUTPUT.PUT_LINE(record_book.age);END;--结束

输出结果:

one

1

注意:一个记录类型变量只能保存从数据库中查询出的一条记录,如果查询出多条记录就会报错。

2.数组类型

数组是具有相同类型的一组成员集合。每一个成员都有一个唯一的下标。PL/SQL中的数组类型为VARRAY。

VARRAY数据类型定义的语法:

TYPE varray_name IS VARRAY(size) OF element_type [NOT NULL];
varray_name为数组名称,size为数组大小,element_type为数组成员类型,默认为null,可以通过增加not null限制。

数组使用步骤:定义,声明,初始化

DECLARE   --定义一个名为my_array,大小为5,成员为字符串的数组  TYPE my_array IS VARRAY(5) OF VARCHAR2(50);  --声明数组  v_my_array my_array;BEGIN  --初始化数组  v_my_array := my_array('one','two','three','four','five');  --数组下标从1开始  DBMS_OUTPUT.PUT_LINE(v_my_array(1));  --从新给数组某个元素赋值  v_my_array(1) := '从新给one赋值';  DBMS_OUTPUT.PUT_LINE(v_my_array(1));END;<span style="color:#FF0000;"></span>
3.使用%TYPE

定义一个变量,其数据类型,与已经存在的某个数据类型一致,可以使用%TYPE保持数据类型一致。

优点:

(1)引用的数据类型可以不知道;

(2)就算引用的类型发生改变时,也能保持改变后的类型,动态保持数据类型的一致性;

DECLARE   --声明部分  TYPE ts_record IS RECORD(       name mytest.name%TYPE,--%TYPE表示name的类型与mytest.name的类型一致       age mytest.age%TYPE  );  record_book ts_record;BEGIN  --执行部分  SELECT name,age INTO record_book   FROM mytest WHERE id = 1;  DBMS_OUTPUT.PUT_LINE(record_book.name);  DBMS_OUTPUT.PUT_LINE(record_book.age);END;--结束
这个语句块中%TYPE就是定义变量的数据类型为数据库表字段类型,当数据库表字段类型发生改变时,动态同步。同时,引用者无须知道类型。

0 0
原创粉丝点击