Oracle PL/SQL复合数据类型

复合数据类型大致可以分为两类。一类是记录类型,适用于处理单行多列数据,有点类似于java中的VO;一类是集合类型,适用于处理单列多行的数据,类似java中的List,以下实验在11.2.0.1.0版本下做的。

1.记录类型

drop table test purge;

create table test

(

id number(2),

name varchar2(60)

);

insert into test values(1,‘aaa‘);

insert into test values(2,‘bbb‘);

insert into test values(3,‘ccc‘);

insert into test values(4,‘ddd‘);

insert into test values(5,‘eee‘);

commit;

--显式定义记录类型

declare

type t_record is record

(

id test.id%type,

name test.name%type

);

var_record t_record;

coun number := 0;

begin

for c_row in (select id,name from test) loop

coun :=
coun + 1;

dbms_output.put_line(‘第‘||coun||‘循环‘);

var_record.id := c_row.id;

var_record.name := c_row.name;

dbms_output.put_line(‘记录:‘||var_record.id||‘---‘||var_record.name);

dbms_output.put_line(‘游标:‘||c_row.id||‘---‘||c_row.name);

end loop;

exception when others then

dbms_output.put_line(sqlcode||sqlerrm);

end;

/

输出结果:

第1循环

记录:1---aaa

游标:1---aaa

第2循环

记录:2---bbb

游标:2---bbb

第3循环

记录:3---ccc

游标:3---ccc

第4循环

记录:4---ddd

游标:4---ddd

第5循环

记录:5---eee

游标:5---eee

--隐式定义记录类型

declare

t_record1 test%rowtype;

cursor c_row(v_id in varchar2) is select id,name from test where id <= v_id;

t_record2 c_row%rowtype;

begin

for row_test in c_row(3) loop

t_record1.id := row_test.id;

t_record1.name := row_test.name;

t_record2.id := row_test.id;

t_record2.name := row_test.name;

dbms_output.put_line(‘表的rowtype:‘||t_record1.id||‘---‘||t_record1.name);

dbms_output.put_line(‘游标的rowtype:‘||t_record2.id||‘---‘||t_record2.name);

dbms_output.put_line(‘游标:‘||row_test.id||‘---‘||row_test.name);

end loop;

exception when others then

dbms_output.put_line(sqlcode||sqlerrm);

end;

/

输出结果:

表的rowtype:1---aaa

游标的rowtype:1---aaa

游标:1---aaa

表的rowtype:2---bbb

游标的rowtype:2---bbb

游标:2---bbb

表的rowtype:3---ccc

游标的rowtype:3---ccc

游标:3---ccc

如果在显式和隐式定义记录中选择,我倾向于选择显式的定义,因为让逻辑更加清晰。

2.集合类型

--索引表

declare

cursor cur_test is select id,name from test;

type t_test1 is table of test%rowtype index by binary_integer;

var_test1 t_test1;

begin

SELECT id,name INTO var_test1(0) FROM test WHERE id=1;

dbms_output.put_line(‘var_test1(0):‘||var_test1(0).id||‘---‘||var_test1(0).name);

SELECT id,name INTO var_test1(10) FROM test WHERE id=2;

dbms_output.put_line(‘var_test1(10):‘||var_test1(10).id||‘---‘||var_test1(10).name);

end;

var_test1(0):1---aaa

var_test1(10):2---bbb

--嵌套表

DECLARE

TYPE t_test1 IS TABLE OF test.id%TYPE;

var_test1 t_test1;

begin

var_test1 := t_test1(1,2,3);

dbms_output.put_line(‘var_test1: ‘||var_test1(1)||‘,‘||var_test1(2)||‘,‘||var_test1(3));

end;

var_test1: 1,2,3

--varray表

DECLARE

TYPE t_test1 IS VARRAY (10) OF test.id%TYPE;

var_test1 t_test1;

begin

var_test1 := t_test1(1,2,3);

dbms_output.put_line(‘var_test1: ‘||var_test1(1)||‘,‘||var_test1(2)||‘,‘||var_test1(3));

end;

var_test1: 1,2,3

索引表和嵌套表集合中的元素的数量没有限制,varray集合中是没有限制的。

索引表不能存储在数据库中,嵌套表和varray可以被存储在数据库中。

时间: 2024-08-04 07:33:34

Oracle PL/SQL复合数据类型的相关文章

[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)

原文:[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) [顶]ORACLE PL/SQL编程详解之二: PL/SQL块结构和组成元素(为山九仞,岂一日之功) 继上四篇:ORACLE PL/SQL编程之八:把触发器说透                ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)                [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]

ORACLE PL/SQL编程之八:把触发器说透

原文:ORACLE PL/SQL编程之八:把触发器说透 ORACLE PL/SQL编程之八: 把触发器说透 大家一定要评论呀,感谢!光发表就花了我将近一个下午. 本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创建DML触发器 8.2.3 创建替代(INSTEAD OF)触发器 8.2.3 创建系统事件触发器 8.2.4 系统触发器事件属性 8.2.5 使用触发器谓词 8

Oracle PL/SQL 高级编程

1. 复合数据类型--记录类型 ?        语法格式 type  类型名 is   record ( 字段1  字段1类型 [not null]:=表达式1; 字段2  字段2类型 [not null] :=表达式2; - ) ?        说明:记录之间相互赋值要求两个记录类型完全相同. ?        案例 举例1 --创建表并插入记录 create table student(idnumber, name varchar2(20), birthday date); insert

ORACLE PL/SQL编程详解

ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数据库进行访问.由于该语言集成于数据库服务器中,所以PL/SQL代码可以对数据进行快速高效的处理.除此之外,可以在ORACLE数据库的某些客户端工具中,使用PL/SQL语言也是该语言的一个特点.本章的主要内容是讨论引入PL/SQL语言的必要性和该语言的

【强烈强烈推荐】《ORACLE PL/SQL编程详解》全原创(共八篇)--系列文章导航

原文:[强烈强烈推荐]<ORACLE PL/SQL编程详解>全原创(共八篇)--系列文章导航 <ORACLE PL/SQL编程详解> 系列文章目录导航 ——通过知识共享树立个人品牌. 本是成书的,但后来做其他事了,就无偿的贡献出来,被读者夸其目前为止最“实在.经典”的写ORACLE PL/SQL编程的文章-! 觉得对你有帮助,请留言与猛点推荐,谢谢. [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下) 本篇主要内容如下:第一章 PL/S

[推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到)

原文:[推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]ORACLE PL/SQL编程之四: 把游标说透(不怕做不到,只怕想不到) 继上两篇:ORACLE PL/SQL编程之八:把触发器说透 ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) 得到了大家的强力支持,感谢.接下来再下猛药,介绍下一篇,大家一定要支持与推荐呀~!我也才有动力写后面的. 本篇主要内容如下: 4.1 游标概念 4.1.1 处理显式游标 4.1.2 处理

[推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆)

原文:[推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆) [推荐]ORACLE PL/SQL编程详解之三: PL/SQL流程控制语句(不给规则,不成方圆) ——通过知识共享树立个人品牌. 继上五篇: [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼.百战不

[推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)

原文:[推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下) [推荐]ORACLE PL/SQL编程详解之一: PL/SQL 程序设计简介(千里之行,始于足下) ——通过知识共享树立个人品牌. 继上六篇: [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) [推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆) [推荐]ORACLE PL/SQL编程之四:把游标说透(

[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)

原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天才在于积累!) ——通过知识共享树立个人品牌.   继上七篇:            [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)            [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之