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
- PL/SQL之复合类型详解
- pl/sql复合类型
- PL/SQL复合类型
- pl/sql 复合类型,表
- pl/sql 复合类型,游标
- pl/sql之定义并使用变量,复合类型
- pl/sql之定义并使用变量,复合类型
- Oracle pl/sql编程 7---复合变量之记录类型
- pl/sql 复合类型,记录实例
- Oracle pl/sql编程 8---复合变量之记录表类型
- pl/sql复合数据类型_pl/sql记录类型
- Pl/SQL 复合类型 RECORD 用法
- PL/SQL之触发器类型
- PL/SQL复合类型变量的使用(record、pl/sql表、bulk collect)
- PL/SQL学习笔记五之复合数据类型/批量绑定!!!
- PL/SQL定义部分之二复合数据类型
- PL/SQL定义复合数据类型
- PL/SQL-2 复合数据类型
- Some resource about Machine Learning
- 资格考试_第一章_金融资产管理与投资基金
- Oracle中的BLOB和CLOB字段类型的区别
- 写在前面的话
- 二维表的数据可以被封装成的数据结构(集合)
- PL/SQL之复合类型详解
- protobuf
- activity向Fragment传值
- Mina(三)
- 千万要小心STL的iterator失效[难度:初级]
- 类加载器
- Collection
- centos 关机和重启命令详解
- [leetcode] Burst Balloons