Oracle PL/SQL复合数据类型
来源:互联网 发布:python的垃圾回收机制 编辑:程序博客网 时间:2024/05/17 00:52
复合数据类型大致可以分为两类。一类是记录类型,适用于处理单行多列数据,有点类似于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可以被存储在数据库中。
- Oracle PL/SQL复合数据类型
- oracle复合数据类型学习五——pl/sql记录
- PL/SQL定义复合数据类型
- PL/SQL-2 复合数据类型
- PL/SQL(三):复合数据类型
- PL/SQL(三):复合数据类型
- pl/sql入门第二章--复合数据类型
- PL/SQL复合数据类型(集合与记录)
- PL/SQL_使用复合数据类型1(PL/SQL记录)
- PL/SQL_使用复合数据类型2(PL/SQL集合)
- pl/sql复合数据类型_pl/sql记录类型
- PL/SQL 11g R2 —— 复合数据类型应用
- PL/SQL学习笔记五之复合数据类型/批量绑定!!!
- PL/SQL定义部分之二复合数据类型
- PL/SQL学习(复合数据类型与游标)
- oracle 数据库数据类型和PL/SQL数据类型
- Oracle PL/SQL数据类型、特殊数据类型
- Oracle 10g复合数据类型pl/sql集合学习六——索引表、嵌套表、变长数组
- Mac 登录界面多了一个其他账户删除
- 让eclipse完全支持HTML/JS/CSS智能提示
- 基准芯片参数里面的SOLDER HEAT SHIFT是什么概念?
- AVL树问题
- 电影TS、TC、SCR、R5、BD、HD等版本是什么意思
- Oracle PL/SQL复合数据类型
- WCF 学习总结2 -- 配置WCF
- 开发 WebLogic Server 的 Web 应用程序、Servlet 和 JSP
- jQuery的三种$()
- Java nio 之 概述
- WebKit库的使用
- deepin 2014.1下Qt creator 无法切换中文输入法
- 如果你比你身边的绝大多数人都强,那你该换朋友圈了
- 转载作者yanzi1225627 Android应用经典主界面框架之一:仿QQ (使用Fragment, 附源码)