PL/SQL之复合类型详解
2016-02-25 23:15
429 查看
PL/SQL中,除了基本类型外,还有一种类型叫做复合类型。
1.记录类型
记录类型把逻辑相关的,分离的,基本数据类型的变量组成一个整体存储起来,必须包括至少一个标量型或RECORD类型成员。
作用是存放互不相同但逻辑相关的信息。在使用记录类型时,需要现在声明部分定义好记录的组成,记录的变量,然后在执行部分
引用记录的变量或成员。
记录类型定义的语法:
实例体会一切:
使用SELECT对记录类型赋值,只需保证记录字段与查询字段相匹配:
第一步,建表,插入数据:
输出结果:
one
1
注意:一个记录类型变量只能保存从数据库中查询出的一条记录,如果查询出多条记录就会报错。
2.数组类型
数组是具有相同类型的一组成员集合。每一个成员都有一个唯一的下标。PL/SQL中的数组类型为VARRAY。
VARRAY数据类型定义的语法:
数组使用步骤:定义,声明,初始化
定义一个变量,其数据类型,与已经存在的某个数据类型一致,可以使用%TYPE保持数据类型一致。
优点:
(1)引用的数据类型可以不知道;
(2)就算引用的类型发生改变时,也能保持改变后的类型,动态保持数据类型的一致性;
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就是定义变量的数据类型为数据库表字段类型,当数据库表字段类型发生改变时,动态同步。同时,引用者无须知道类型。
相关文章推荐
- SQLiteConnectionPool学习笔记
- mycat mysql主从配置实现读写分享篇
- 连接Mysql提示Can’t connect to local MySQL server through socket的解决方法
- Mac下修改mysql字符集
- 黄聪:MYSQL5.6缓存性能优化my.ini文件配置方案
- mysql中的过程和函数
- 一、oracle 高水位线详解
- servlet学习(可以使用jdbc)
- 收集oracle统计信息
- 一个小工具完成对memcached/kt/mongodb/redis的性能监测
- mysql主从复制
- mysql 用drop和delete方法删除用户的区别(草稿)
- mysql 用drop和delete方法删除用户的区别(草稿)
- oracle转mysql中的一些注意点(后面会继续添加)
- MySQL入门(二)
- 数据库死锁的解决办法
- 深度学习的浅实践:开源软件/数据库实现表情识别(2)
- <转>mysql 树查询语句
- Mysql如何储存中文字符
- sqlserver字段添加注释方法