索引表(PL/SQL表)
索引表的下标可以为负值,而且其元素个数没有限制.
Oracle9i之前,索引表的元素下标只能使用数字类型: binary_integer和PLS_integer ;
Oracle9i开始,索引表的元素下标也允许使用varchar2类型.
注:不能做为表列的数据类型使用.
Type ename_table_type is table of varchar2(100)
index by binary_integer;
ename_table ename_table_type ;
Select name into ename_table(-1) from emp where ….
declare
--数组下标索引
i binary_integer := -1 ;
--定义索引表数组类型
type ename_table_type is table of emp.ename%type index by binary_integer ;
--创建数组变量
v_ename_table ename_table_type ;
cursor v_emp_cur is select * from emp where deptno=20 ;
begin
--给数组变量赋值
for v_record in v_emp_cur loop
v_ename_table(i) := v_record.ename ;
i := i+1 ;
end loop;
--判断索引表里是否有元素
if(v_ename_table.count>0) then
--输出数组里的值
for j in v_ename_table.first..v_ename_table.last loop//从索引表的第一项,到最后一项
dbms_output.put_line(v_ename_table(j));
end loop ;
end if ;
end;
----------------------------------------------------------------------
嵌套表(Nested Table)
数组下标从1开始,长度不限.
嵌套表需要先进行初始化才能使用.
可以做为表列的数据类型使用.
Type ename_table_type is table of varchar(100);
Ename_table ename_table_type ;
--构造方法,初始情况下有两个元素.
Ename_table := ename_table_type (’A’,’A’);
--构造方法,初始情况下没有元素.
ename_table_type();
--分配一个空间
Ename_table.extend ;
Select name into ename_table(2) from emp where ….
declare
--定义嵌套表数据类型
type ename_table_type is table of emp.ename%type;
--定义嵌套表类型的变量,并调用构造方法进行初始化.
ename_table ename_table_type := ename_table_type();
cursor v_emp_cur is select ename from emp where deptno =20 ;
--定义嵌套表的开始下标
i binary_integer :=1 ;
begin
for v_record in v_emp_cur loop
--给ename_table变量分配空间
ename_table.extend;
--给ename_table变量赋值
ename_table(i) :=v_record.ename ;
i := i+1 ;
end loop ;
--输出嵌套表变量ename_table里的所有值
for j in 1..ename_table.count loop
dbms_output.put_line( ename_table(j) );
end loop ;
end;
注:在表列中使用嵌套表,需要先使用create type 命令先创建嵌套表类型.
create type phone_table_type is table of varchar2(20);
--新建
create table student
(
stuid number(5) ,
name varchar2(20),
phone phone_table_type
) nested table phone store as phone_table ;
declare
v_phone_table phone_table_type ;
begin
--在PL/SQL块中为nested table 插入数据
insert into student values(1,'lisi',phone_table_type('138111111','139111111'));
--在PL/SQL块中检索nested table 列的数据
select phone into v_phone_table from student where stuid=1 ;
for i in 1..v_phone_table.count loop
dbms_output.put_line('phone:'||v_phone_table(i) );
end loop;
v_phone_table := phone_table_type('135111111','136111111');
--在PL/SQL块中更新nested table 列的数据
update student set phone = v_phone_table where stuid=1 ;
select phone into v_phone_table from student where stuid=1 ;
for i in 1..v_phone_table.count loop
dbms_output.put_line('phone:'||v_phone_table(i) );
end loop;
commit;
end;
------------------------------------------------------------------
变长数组(Varray)
变长数组需要先进行初始化才能使用.
可以做为表列的数据类型使用.
数组下标从1开始,长度有限.
Type ename_table_type is varray(10) of varchar2(100);
Ename_table ename_table_type := ename_table_type (‘A’,null);
Select name into ename_table(2) from emp where ….
declare
--定义变长数组的类型名称,及最大长度
type ename_varray_type is varray(10) of varchar2(20);
--定义变长数组变量,并进行初始化
v_ename_varray ename_varray_type := ename_varray_type() ;
cursor v_emp_cur is select * from emp where deptno=20 ;
i binary_integer := 1 ;
begin
for v_record in v_emp_cur loop
--给变长数组分配空间
v_ename_varray.extend ;
--给变长数组赋值
v_ename_varray(i) :=v_record.ename ;
i := i + 1 ;
end loop;
--输出变长数组里的元素
for i in 1..v_ename_varray.count loop
dbms_output.put_line(v_ename_varray(i));
end loop;
end;
--在表列中使用变长数组
create type phone_arr_type is varray(5) of varchar2(20) ;
create table student
(
stuid number(4),
name varchar2(20),
phone phone_arr_type
);
//其它用法和嵌套表一样
-------------------------------------------------------------------
记录表
为了处理多行多列数据,可以使用记录表.
declare
--定义记录表类型
type emp_table_type is table of emp%rowtype index by binary_integer ;
--定义记录表变量
v_emp_table emp_table_type ;
cursor v_emp_cur is select * from emp where deptno=20 ;
--定义记录表下标索引
i binary_integer := -1 ;
begin
--给记录表变量赋值
for v_record in v_emp_cur loop
v_emp_table(i) := v_record ;
i := i + 1 ;
end loop;
--输出记录表变量的值
for j in v_emp_table.first..v_emp_table.last loop
dbms_output.put_line(v_emp_table(j).ename);
end loop;
end;
分享到:
相关推荐
6. **复合类型**:PL/SQL支持数组、集合和记录等复合类型,这些使得处理复杂数据结构变得可能。手册会详细介绍这些类型的创建和使用。 7. **包(Packages)**:包是将相关的过程、函数和变量封装在一起的一种方式,...
### PL/SQL 集合相关知识点详解 #### 一、概述 在PL/SQL中,集合(Collections)是一类非常重要的数据结构,用于存储多个相同类型的数据元素。这些元素可以是基本数据类型如`NUMBER`、`VARCHAR2`等,也可以是复杂...
此外,PL/SQL还支持集合类型,如VARRAY(可变数组)和TABLE(表类型),这对于处理大量数据非常有用。 这本书的配套源代码可能会涵盖以下几个方面: 1. **基础操作**:包括简单的SQL查询、变量声明、流程控制...
- **集合与记录**:学习如何使用PL/SQL中的集合和记录类型,这些结构可以帮助更高效地处理数据集。 - **游标**:介绍游标的使用方法,包括隐式游标和显式游标,以及如何利用游标遍历查询结果。 #### 四、PL/SQL中的...
PL/SQL软件包是一组相关的过程和函数的集合,它可以用来组织和管理程序。软件包由两部分组成,说明部分和包体部分,分别用于声明公共接口和实现逻辑。 异常处理在PL/SQL中用来处理程序运行时发生的错误。PL/SQL预定...
- **记录和集合**:用于存储多条数据,可以是自定义类型的记录或标准的PL/SQL集合类型。 - **包**:封装相关的过程、函数和变量,提供模块化的代码组织。 学习PL/SQL不仅有助于你更好地管理Oracle数据库,还能提升...
- **程序包**:集合了一系列相关的子程序、类型定义和其他PL/SQL元素,便于管理和复用。 **2.3 标识符规则** PL/SQL中的标识符遵循以下规则: - 标识符长度不能超过30个字符。 - 第一个字符必须是字母。 - 不区分...
* 包:是一组相关的 PL/SQL 程序块的集合。 * 触发器:是一种特殊的存储程序,用于自动执行某些操作。 定义函数的语法: CREATE [OR REPLACE] FUNCTION function_name [(argument [IN|OUT|IN OUT] datatype)] ...
5. **集合类型**:包括数组(PLS_INTEGER索引的PL/SQL表)和关联数组(索引由非数字类型的值定义),以及如何在集合中插入、删除和迭代元素。 6. **包(PACKAGE)**:创建和使用包来组织相关的过程和函数,实现模块...
5. **过程与函数**:过程是一组PL/SQL语句的集合,用于执行特定任务。函数与过程类似,但返回一个值。它们可以提高代码的复用性和模块化。 6. **异常处理**:PL/SQL提供了一个强大的异常处理机制,允许你定义和捕获...
2. **复合数据类型**:介绍PL/TABLE、记录类型(%ROWTYPE)以及集合类型(VARRAY和NESTED TABLE),这些都是处理大量数据或构建复杂数据结构的关键工具。 3. **游标**:讲解如何使用显式和隐式游标进行查询和遍历...
5. **数据操作**:除了标准的SQL查询,PL/SQL还支持集合操作,如BULK COLLECT和FORALL,可以高效地处理大量数据。 6. **游标**:PL/SQL中的游标允许逐行处理查询结果,是处理复杂数据操作的重要工具。 7. **记录...
2.2 **PL/SQL集合** 集合是一组相同类型的元素,分为索引数组和关联数组。索引数组通过数字索引访问,关联数组则通过键值对访问,如VARRAY(固定大小数组)和TABLE(动态大小数组)。 ### 3. PL/SQL中的SQL 3.1 *...
**4.3 存储过程** 是预编译的PL/SQL代码集合,可以接受输入参数,返回结果,提高效率并简化代码管理。 **4.4 触发器** 是在特定数据库事件(如INSERT、UPDATE或DELETE)发生时自动执行的PL/SQL代码,常用于实现业务...
- 表类型:使用PL/SQL表类型进行集合操作。 -记录类型:定义和使用记录类型,类似于结构或对象。 5. **程序单元**: - 包(PACKAGE):定义公共接口和私有实现,提高代码复用性。 -存储过程和函数:创建存储在...
《Oracle PL/SQL程序设计(第5版)》基于Oracle数据库11g,从PL/SQL编程、PL/SQL程序结构、PL/SQL程序数据、PL/SQL中的SQL、PL/SQL应用构建、高级PL/SQL主题这6个方面详细系统地讨论了PL/SQL以及如何有效地使用它。...
5. **集合类型**:讨论PL/SQL中的集合类型,如数组、关联数组、表类型和索引表,以及它们在处理大量数据时的优势。 6. **包(PACKAGE)**:解释如何创建和使用包,包括包规范(PACKAGE SPECIFICATION)和包体...
3. **集合和游标**:集合是PL/SQL中处理多行数据的有效工具,如VARRAYs(固定大小数组)和associative arrays(关联数组)。游标则允许我们一行一行地处理查询结果,是处理动态数据的重要手段。 4. **存储过程和...
- `sorts.pkg`:可能包含如何在PL/SQL中对数据进行排序的示例,可能涉及到嵌套表或集合的排序,或者使用BULK COLLECT和ORDER BY子句。 6. **统计分析(Stats.pkg)** - `stats.pkg`:这部分可能涉及在PL/SQL中...
2. **变量和数据类型**:PL/SQL支持多种内置数据类型,如NUMBER、VARCHAR2、DATE等,以及PL/SQL特有的记录和集合类型。 3. **流程控制语句**:包括IF-THEN-ELSIF-ELSE、CASE、FOR循环、WHILE循环等,用于控制程序的...