- 记录(Record): 由单行多列的标量类型构成的临时记录对象类型
declare
type location_record_type is record(
street_address varchar2(40),
postal_code varchar2(6),
city varchar2(10),
country char(3) not null :='CHN'
);
l_my_loc location_record_type;
begin
l_my_loc.street_address := '上海市徐汇区';
l_my_loc.postal_code := '100003';
l_my_loc.city := '上海市';
dbms_output.put_line('我的住址是:'||l_my_loc.street_address||'--'||l_my_loc.city);
end;
- PL/SQL表(table): 同种类型的一维、无边界的稀疏集合(稀疏数组就是数组中大部分的内容值都未被使用(或都为零)),只能用于 PL/SQL
/*
* PL/SQL表,在PL/SQL中使用可以模仿数组的非永久表
*/
declare
type my_text_table_type is table of varchar2(20) index by binary_integer;
l_text_type my_text_table_type;
begin
l_text_type(1) := 'kevin1';
l_text_type(2) := 'kevin2';
dbms_output.put_line('数量'||l_text_type.count||'---'||l_text_type(2));
/*
* 删除数据
*/
l_text_type.delete(1);
dbms_output.put_line(l_text_type(2));
/*
* 删除表
*/
l_text_type.delete;
end;
/*
* 遍历表
*/
declare
type my_text_table_type is table of varchar2(200) index by binary_integer;
l_text_table my_text_table_type;
l_index number;
begin
for emp_rec in (select * from emp) loop
l_text_table(emp_rec.empno) := emp_rec.ename;
end loop;
--取得第一个索引
l_index := l_text_table.first;
loop
exit when l_index is null;
dbms_output.put_line(l_index||':'||l_text_table(l_index));
--取得下一个索引
l_index := l_text_table.next(l_index);
end loop;
end;
- 变量数组(varray): 同种类型的一维对象集合,它是有界且不稀疏的。在定义 VARRAYs 时要指定它的最大范围。可以在 PL/SQL 和 Database 中被定义,但它其中的元素是有顺序的
declare
type my_text_varray_type is varray(2) of varchar2(10);--创建Collection,需要指定最大的范围
l_text_varray my_text_varray_type:=my_text_varray_type();--创建instance,需要使用够着函数
l_index number;
begin
l_text_varray.extend(2);--赋值前需要分配空间,不能超过最大范围
l_text_varray(1):='aaa';
l_text_varray(2):='bbb';
l_index := l_text_varray.first;
for var_index in l_index..l_text_varray.count loop
dbms_output.put_line(l_text_varray(var_index));
l_index := l_text_varray.next(l_index);
end loop;
end;
- 嵌套表(Nested tables): 同种类型的一维无边界对象集合,可以在 PL/SQL 和 Database(某一列为一个嵌套表)中被定义
declare
type my_nestedTable_type is table of varchar2(10);--创建集合,和PL/SQL表相差一个index by
l_nestedTable1 my_nestedTable_type:=my_nestedTable_type(); --创建instance,需要使用构造函数
l_nestedTable2 my_nestedTable_type:=my_nestedTable_type();
l_nestedTable3 my_nestedTable_type:=my_nestedTable_type();
begin
l_nestedTable1.extend(2); --赋值前需要分配空间
l_nestedTable1(1):='aaa';
l_nestedTable1(2):='bbb';
l_nestedTable2.extend;--分配一个空间
l_nestedTable2(1):='bbb';
l_nestedTable3:=l_nestedTable1 multiset except l_nestedTable2;
for l_row in l_nestedTable1.first..l_nestedTable1.last loop
dbms_output.put_line(l_nestedTable1(l_row));
end loop;
end;
- example:
/**
* PL/SQL table,nested table,varray in record
*/
declare
type my_table is table of varchar2(10) index by binary_integer;
type my_nestedTable is table of varchar2(20);
type my_varray is varray(2) of varchar2(10);
type my_table_in_record is record(
l_table my_table,
l_nestedTable my_nestedTable:=my_nestedTable(),
l_varray my_varray:=my_varray()
);
l_record my_table_in_record;
begin
--初始化PL/SQL表
l_record.l_table(1):='table1';
l_record.l_table(2):='table2';
--初始化嵌套表
l_record.l_nestedTable.extend(2);
l_record.l_nestedTable(1):='nestedTable1';
l_record.l_nestedTable(2):='nestedTable2';
--初始化变量数组
l_record.l_varray.extend(2);
l_record.l_varray(1):='varray1';
l_record.l_varray(2):='varray2';
--打印
for index_var in l_record.l_varray.first..l_record.l_varray.last loop
dbms_output.put_line(l_record.l_varray(index_var));
end loop;
end;
/*
* record in table
*/
declare
type my_record is record(
name varchar2(20),
id positive,
gender integer(1)
);
type my_table is table of my_record index by binary_integer;
l_table my_table;
begin
l_table(1).name:='bbb';
l_table(1).id:=1;
l_table(1).gender:=1;
l_table(2).name:='aaa';
l_table(2).id:=2;
l_table(2).gender:=0;
for index_var in l_table.first..l_table.last loop
dbms_output.put_line(l_table(index_var).name||'--'||l_table(index_var).id||'--'||l_table(index_var).gender);
end loop;
end;
- Choosing a Collection Type
1.如果要用稀疏 array,那么只能使用 associative array,虽然可以先分配 nested table 在删除其中的项目,但效率很低
2.如果在 PL/SQL 中要用负数的下标,只能用 associative array
3.如果使用 10g,希望使用 set 层面的操作,那么选择 nested tables + MULTISET EXCEPT 的方法
4.如果要限制存储的行数,使用 VARRAYs
5.如果要在 column 中存储大数据量集合,那么使用 nested table,Oracle可以使用单独的表来存储它
6.如果你想将存在 collection column 中的数据保持原有顺序,并且数据量很小,可以使用 VARRAY,小的概念可以按照 BLOCK 的大小来判断,如果数据量超过一个 BLOCK,将会产生行连接
相关推荐
Oracle 集合操作函数 union、intersect、minus Oracle 集合操作函数是用于合并多条 SELECT 语句的结果的函数,包括 UNION、INTERSECT、MINUS 等。这些函数可以将多个查询结果合并成一个结果集,以便进一步处理和...
Oracle 集合操作详解 Oracle 集合操作是指在数据库中对数据进行集合运算的操作,包括 union、union all、intersect 和 minus 等操作。这些操作可以对数据进行合并、交叉、差异等处理,提高数据处理效率。 union ...
### Oracle集合类型输出参数的PL/SQL存储过程及其Java调用 #### 1. 引言 存储过程因其高效执行、事务处理能力以及安全性,在数据库应用程序中被广泛应用。特别是使用Oracle数据库时,PL/SQL(一种专为Oracle设计的...
Oracle集合类型输出参数的PL/SQL存储过程及Java调用主要涉及如何在Oracle数据库中使用存储过程处理集合数据,并在Java应用中调用这些过程。本文档介绍了一种使用索引表作为输出参数的方法,以及如何在Java中处理返回...
本资源涵盖知识(包括使用案例):Oracle集合运算,交集、并集、补集、差集. 集合运算就是将多个结果集组合成一个结果集。
### Oracle SQL 集合知识点详解 #### 一、Oracle 安装完成后的初始口令 在Oracle数据库安装完成后,存在一系列预设的账号及其初始密码。这些账号对于数据库的安全性和管理至关重要。以下是一些常见账号及其初始口令...
### Oracle PL/SQL 集合详解 #### 12.1 集合概述 在深入了解Oracle PL/SQL中的集合之前,先回顾一下与集合相关的概念和术语,包括不同集合类型的描述及其示例。 ##### 12.1.1 集合概念和术语 **元素和索引值** -...
Oracle数据库系统提供了多种数据类型,其中包括了三种主要的集合数据类型:VARRAY(变量数组)、NESTED TABLE(嵌套表)和 Associative Array(关联数组,也称为INDEX BY TABLE)。这三种集合数据类型在存储和操作一...
本教程的"Oracle高级教程-深入学习集合"将详细阐述以上各个主题,并提供丰富的示例和练习,帮助读者熟练掌握Oracle集合的使用,进一步提升数据库管理与开发的专业水平。通过阅读并实践,你将能够更好地应对复杂的...
这是有关oracle的集合,供大家分享,虽然有很多错误,但也供大家讨论。
学Oracle的好东西,适合初学者,集合了大部分基本操作命令的实现
oracle 创建表空间和用户; oracle job的创建及相关命令; oracle 触发器或存储过程中执行外部exe程序; oracle 导入导出; oracle 删除所有表的数据; sqlserver 读取excel
在Oracle数据库管理中,经常会遇到各种错误,本文主要讨论了三个常见的Oracle错误及其解决方案。 首先,关于用户和修改用户密码的问题。Oracle数据库默认有一些预设的用户名和密码,例如Scott/tiger,System/...
oracle 常用命令_oracle 命令大全_oracle命令集合_oracle基本命令 非常方便,带查询功能,能很方便的查询你要找的oracle命令写法
在"ORCL数据库相关文档.rar"这个压缩包中,我们可以找到一系列关于Oracle数据库的重要资料,尤其是"Oracle命令集合"部分,它涵盖了Oracle数据库管理和操作的各种常见命令。 首先,创建实例是Oracle数据库管理的基础...
"oracle日常巡检命令集合" Oracle日常巡检命令集合是数据库管理员最重要的工具之一,通过这些命令,可以检查数据库的状态、性能和安全性。以下是oracle日常巡检命令集合的详细说明: 检查数据库基本状况 1.1. ...
在Java中调用Oracle函数并处理返回的Oracle特定数据类型,如集合或索引表,通常涉及到Oracle的PL/SQL包和Java的JDBC驱动。以下是对这个主题的详细说明: 1. **Oracle索引表类型**: Oracle索引表是一种PL/SQL数据...
Oracle资料大全集合是一个涵盖Oracle数据库系统方方面面的综合资源包,对于学习、研究或者工作中需要处理Oracle相关问题的人员来说,是一份极其宝贵的参考资料。Oracle,作为全球广泛使用的大型关系型数据库管理系统...
6. **oci8_collection.c**:提供了对Oracle集合类型的支持,允许在PHP中操作Oracle的数组类型数据。 7. **CREDITS**:列出oci8扩展开发和贡献者的名单,体现了开源社区的协作精神。 8. **oci8.dsp**:可能是Visual...