`

Oracle_学习开发子程序_复合数据类型二(PL/SQL集合)

阅读更多
一、PL/SQL集合
    为了处理单列多行,可以使用PL/SQL集合进行处理。PL/SQL集合类似于高级语言数组的一种复合数据类型、集合类型包括索引表(PL/SQL表)、嵌套表(Netsed Table)、变长数组(VARRAY)等三种类型。
1、索引表
  索引表也成为PL/SQL表,它是oracle早期用来处理PL/SQL数组的数据类型,注意,高级语言数组的元素个数是有限制的,并且下标不能为负数,而索引表的元素个数没有限制,并且下标可以为负数,注意索引表只能作为PL/SQL复合数据类型使用,而不能作为表列的数据类型使用,定义索引表的语法如下:
type type_name is table of element_name
[not null]index by key_type;
identifier type_name;
如图所示:type_name用于指定自定义数据类型的名称(is table..index表示索引表),element_type用于指定索引表元素的数据类型,not null表示不允许应用null元素,key_type用于指定索引表元素下标的数据类型(binary_integer、pls_integer或varchar2);identifier用于定义索引表变量,注意oracle9i之前,索引表下标只允许用的数据类型binary_integer和pls_integer;而从oracle9i开始不仅可以为binary_integer和pls_integer,而且还可以为varchar2类型,
示例一、在索引表中使用binary_integer和pls_integer
 declare
 type temp_table_type is table of cip_temps.NAME%type
 index by binary_integer;
 temp_table temp_table_type;
 begin
    select name into temp_table(-1) from cip_temps where id=6;
    dbms_output.put_line(temp_table(-1));
 end;

示例二、在索引中使用varchar2
declare
 type temp_table_type is table of number
 index by varchar2(10);
 temp_table temp_table_type;
begin
temp_table('北京'):=1;
temp_table('上海'):=2;
temp_table('河北'):=3;
dbms_output.put_line(temp_table.first);
dbms_output.put_line(temp_table.last);
end;

2、嵌套表

  嵌套表也是一种用来处理PL/SQL数组的数据类型,高级语言数组元素下标是用0或1开始,并且元素个数有界限,而嵌套表下标是从1开始的,并且元素个数没有界限,另外高级语言数组元素值是顺序的,而嵌套表的数组元素值是可以稀疏的,注意索引表类型不能做为表列的数据类型使用,但嵌套表类型可以做为表列的数据类型使用, 语法如下:
type type_name is table of element_type;
identifier type_name;
如上所示,type_name用于指定嵌套表名称,element_type用于指定嵌套表元素的数据类型,identifier用于定义嵌套表变量,注意:当使用嵌套表时,必须首先使用构造方法初始化嵌套表,示例如下:
delcare
type temp_table_type is table of emp.name%type;
temp_table temp_table_type:=temp_table_type('A','A');
使用嵌套表的说明方法
(1)在PL/SQL快中使用嵌套表
   必须要初始化嵌套表变量,然后才能在PL/SQL块中引用嵌套表,示例如下:
declare
 type temp_table_type is table of cip_temps.NAME%type;
 temp_table temp_table_type;
begin
temp_table:=temp_table_type('mary','123','123');
select name into temp_table(3) from cip_temps where id=6;
dbms_output.put_line(temp_table(3));
end;

(2)、在表列中使用嵌套表
  嵌套表类型不仅可以再PL/SQL块中直接引用,也可以作为表列的数据类型使用,但如果在表列中使用嵌套表类型,必须首先使用create type命令穿件类型,注意,当使用嵌套表类型做为表列的数据类型,必须要为嵌套表列指定专门的存储表,示例如下:
create type phone_type is table of varchar2(20);
/
create table employee(
id number(4),
name varchar2(10),
sal number(6,2),
phone phone_type
)nested table  phone store as phone_table;

示例一、在PL/SQL块中嵌套表列插入数据
当定义嵌套表类型时,oracle自动为该类型生成相应的构造方法,当为嵌套表列插入数据时,需要使用嵌套表的构造方法,示例如下:
declare
 begin
insert into employee values(1,'1111',5,phone_type('aaaa','3333333'));
end;

示例二、在PL/SQL块中检索嵌套表列的数据
     当在在PL/SQL块中检索嵌套表列的数据时,需要定义嵌套表类型的变量接收其数据,示例如下:
declare
temp_phone phone_type;
 begin
select phone into temp_phone from employee where id=1;
for i in 1..temp_phone.count loop
dbms_output.put_line(temp_phone(i));
end loop;
end;

示例三、在PL/SQL块中更新嵌套表列的数据
  当在PL/SQL块中更新嵌套表列的数据时,首先需要定义嵌套表变量,并使用构造方法初始化该变量,然后才能执行部门使用update语句更新,示例如下:
declare
temp_phone phone_type:=phone_type('aa','bb');
 begin
update employee set phone=temp_phone where id=1;
end;

3、变长数组
其元素下标以1开始,并且元素下标最大是有限制的,定义array语法如下:
type  type_name is vrray(limit_size) of element_type[not null];
identifier type_name;
如上所示:type_name类型名称,limit_size用于指定下标最大值,element_type用于指定元素数据类型,identifer用于定义vrray变量,当使用vrray元素时,必须使用构造方法初始化array元素,示例如下:
declare
type temp_varray_type is vrray(20) of temp.name%type;
temp_varray temp_varray_type:=temp_varray_type('a');
关于用法同嵌套表
二、PL/SQL记录表
PL/SQL变量用于处理单行单列数据,PL/SQL记录用于处理单行多列数据,PL/SQL集合用于处理多列单行数据,为了在PL/SQL快中处理多行多列数据,开发人员可以使用PL/SQL记录表处理多行多列数据,示例如下:
declare
type temp_table_type is table of cip_temps%rowtype
 index by binary_integer;
 temp_table temp_table_type;
 begin
  select * into temp_table(1) from cip_temps where id=6;
  for i in 1..temp_table.count loop
    dbms_output.put_line(temp_table(i).name||':'||temp_table(i).address);
  end loop;
end;
分享到:
评论

相关推荐

    PL/SQL 用户指南与参考

    第三章 PL/SQL数据类型 第四章 PL/SQL的控制结构 第五章 PL/SQL集合与记录 第六章 PL/SQL与Oracle间交互 第七章 控制PL/SQL错误 第八章 PL/SQL子程序 第九章 PL/SQL包 第十章 PL/SQL对象类型 第十一章 本地...

    精通Oracle 10g PL/SQL编程

    通过学习本书,读者不仅可以掌握PL/SQL的基础编程知识(嵌入SQL语句和编写子程序),而且还可以掌握PL/SQL的所有高级开发特征(使用记录类型、集合类型、对象类型和大对象类型)。另外,本书还为应用开发人员提供了大量...

    Oracle8i PL/SQL高级程序设计 高清晰版

    共分为7部分(7个pdf文档...第一部分:PL/SQL介绍及开发环境 1.PL/SQL介绍 2.PL/SQL开发和运行环境 3.跟踪和调试 第二部分:非对象功能 4.创建子程序和包 5.使用子程序和包 6.数据库触发器 7.数据库作业和文件输入输出

    PL/SQL课件

    PL/SQL简介(第1~2章) PL/SQL中的SQL语句(第3章) ...复合数据类型(第15~16章) 动态SQL(第17章) 批量SQL(第18章) 子程序和包(第19~22章) Oracle中对象类型(第23章) Oracle提供的包(第24章)

    PL/SQL经典介绍

    第三章 PL-SQL数据类型 第四章 PL-SQL的控制结构 第五章 PL-SQL集合与记录(1) 第六章 PL-SQL集合与记录(2) 第七章 PL-SQL与Oracle间交互 第八章 控制PL-SQL错误 第九章 PL-SQL子程序 第十章 PL-SQL包 第十一章 ...

    PLSQL基础word

    PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本文将讲述PL/SQL基础语法,结构和组件、以及如何设计并执行一个PL...

    ORACLE PL/SQL 基础教程及参考

    PL/SQL语言是的SQL语言扩展,具有为程序开发而设计的特性,如数据封装、异常处理、面向对象等特性。 PL/SQL是嵌入到Oracle服务器和开发工具中的,具有很高的执行效率和同Oracle数据库的完美结合。在PL/SQL模块中可以...

    PL-SQL用户指南与参考

    · 第八章 PL/SQL子程序 2008-04-08 · 第七章 控制PL/SQL错误 2008-04-08 · 第六章 PL/SQL与Oracle间交互 2008-04-08 · 第五章 PL/SQL集合与记录(2) 2008-04-08 · 第五章 PL/SQL集合与记录(1) ...

    精通Oracle.10g.Pl.SQL编程

    通过学习本书,读者不仅可以掌握PL/SQl的基础编程知识(嵌入SQL语言和编写子程序),而且还可以掌握PL/SQL的所有高级开发特征(使用记录类型、集合类型、对象类型和大对象类型)。另外,本书还为应用开发人员提供了...

    ORACLE PL/SQL 存储过程 触发器

    ORACLE PL/SQL 存储过程 触发器 ORACLE PL/SQL 存储过程 触发器 子程序 游标

    精通Oracle 10g PL SQL编程

    通过学习本书,读者不仅可以掌握PL/SQL的基础编程知识(嵌入SQL语句和编写子程序),而且还可以掌握PL/SQL的所有高级开发特征(使用记录类型、集合类型、对象类型和大对象类型)。另外,本书还为应用开发人员提供了...

    PLSQL用户指南与参考.pdf

    第三章 PL/SQL 数据类型 第四章 PL/SQL 的控制结构 第五章 PL/SQL 集合与记录 第六章 PL/SQL 与 Oracle 间交互 第七章 控制 PL/SQL 错误 第八章 PL/SQL 子程序 第九章 PL/SQL 包 第十章 PL/SQL 对象类型 第十一章 ...

    PL/SQL 基础.doc

    PL/SQL 基础,一个不错的 PL/SQL 参考手册。内容预览: ---- 第一章 PL/SQL 简介 ---- 1. Oracle应用编辑方法概览 1) Pro*C/C++/... : C语言和数据库打交道的方法,比OCI更常用; 2) ODBC 3) OCI: C语言和...

    Oracle_plsql讲义:第22章 创建子程序和包.ppt

    Oracle_plsql讲义:第22章 创建子程序和包.ppt

    C# 访问Oracle示例+PL/SQL+存储过程+触发器 完整示例 测试可用 易懂

    /*函数是可以返回值的命名的 PL/SQL 子程序。 创建函数的语法: CREATE [OR REPLACE] FUNCTION <function name> [(param1,param2)] RETURN <datatype> IS|AS [local declarations] BEGIN Executable ...

    精通Oracle.10g.PLSQL编程

    使用复合数据类型 8.1 PL/SQL记录 8.1.1 定义PL/SQL记录 8.1.2 使用PL/SQL记录 8.2 PL/SQL集合 8.2.1 索引表 8.2.2 嵌套表 8.2.3 变长数组(VARRAY) 8.2.4 PL/SQL记录表...

    Oracle的pl/sql和sqlplus

    1.练习利用SQL*Plus编写、执行PL/SQL程序的命令。 2.记录执行命令和操作过程中遇到的问题及解决方法,注意从原理上解释原因。 3.练习利用PLSQL Developer编写和管理存储过程、存储函数和触发器等。

    pl/sql 参考语法,有用

    PL/SQL是Oracle对SQL规范的扩展,是一种块结构语言,即构成一个PL/SQL程序的基本单位(过程、函数和无名块)是逻辑块,可包含任何数目的嵌套子块。这种程序结构支持逐步求精方法解决问题。一个块(或子块)将逻辑上...

Global site tag (gtag.js) - Google Analytics