`

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;
分享到:
评论

相关推荐

    oracle 9i pl/sql程序设计笔记

    ### Oracle 9i PL/SQL程序设计笔记精要 ...掌握PL/SQL的不同块类型及其使用方法对于开发高效、可靠的数据库应用程序至关重要。此外,熟悉存储过程和触发器的创建与使用,将有助于提升应用程序的性能和数据安全性。

    oracle_oracle_oraclepl/sql_

    2. **变量和数据类型**:PL/SQL支持多种数据类型,包括数值型(如NUMBER)、字符型(VARCHAR2和CHAR)、日期型(DATE)、布尔型(BOOLEAN)以及复合和对象类型。 3. **流程控制**:PL/SQL提供了IF-THEN-ELSIF-ELSE...

    Oracle PL/SQL程序设计(第5版)(上下册)

    - **新特性概述**:介绍Oracle 11g中引入的与PL/SQL相关的新增功能,例如新的数据类型、函数、性能优化技术等。 - **性能提升技术**:提供了一些具体的例子和最佳实践,展示了如何利用Oracle 11g的新特性来进一步...

    ORACLE PL/SQL从入门到精通

    此外,书中还涉及到了ORACLE数据库的安装、存储过程的编写、序列操作、数据类型转换、程序设计指导原则、合并数据库中的数据行(MERGE)、约束、索引、子查询、分页技术等高级主题。 最后,还有关于字符串、数值、...

    Oracle PL/SQL专家指南-高级PL/SQL解决方案的设计与开发

    2. **复合数据类型**:介绍PL/TABLE、记录类型(%ROWTYPE)以及集合类型(VARRAY和NESTED TABLE),这些都是处理大量数据或构建复杂数据结构的关键工具。 3. **游标**:讲解如何使用显式和隐式游标进行查询和遍历...

    Oracle PL/SQL学习官方教材

    Oracle PL/SQL是一种强大的编程语言,它将SQL与过程编程语言的特性相结合,为数据库开发提供了丰富的功能。在Oracle数据库环境中,PL/SQL是开发高效、可靠和可维护的数据库应用程序的关键工具。以下是对"Oracle PL/...

    ORACLE PL/SQL 程序设计(第五版)

    《ORACLE PL/SQL 程序设计(第五版)》是Oracle数据库开发领域的一本经典教程,专注于讲解如何使用PL/SQL这一强大的过程化语言进行数据库编程。这本书旨在帮助读者掌握PL/SQL的基本概念、语法和高级特性,以便在实际...

    一个对数据库的操作工具PL/SQLpl/sqL工具

    6. **子程序**:PL/SQL支持函数和过程的定义,这些子程序可以在多个地方重复使用,降低了代码的冗余。 7. **包(Packages)**:包是将相关的类型、变量、常量、过程和函数组合在一起的命名实体,便于管理和重用。 ...

    Oracle8 PL/SQL程序设计

    9. **性能优化**:学习PL/SQL的性能调优技巧,如减少数据库访问、有效使用绑定变量、避免不必要的数据类型转换等。 10. **并发控制**:理解锁定机制和并发问题,如死锁和幻读,以及如何通过隔离级别来解决这些问题...

    PLSQL.zip_oracl_oracle pl/sql ppt_pl sql ppt tutorial_pl/sql_pls

    "PLSQL.zip_oracl_oracle pl/sql ppt_pl sql ppt tutorial_pl/sql plsql.ppt"这个压缩包提供了学习PL/SQL的基础材料,通过"第一章 pl-sql介绍.ppt"开始你的学习之旅,逐步探索这个强大而灵活的数据库编程语言。

    oracle pl/sql fundamentals

    2. **变量和数据类型**:深入学习PL/SQL中的变量声明,包括内置的数据类型(如NUMBER、VARCHAR2、DATE等),以及如何初始化和操作这些变量。 3. **控制流程语句**:学习条件判断(IF-THEN-ELSIF-ELSE)和循环结构...

    Oracle8 PL/SQL高级程序设计.rar

    2. **变量和数据类型**:PL/SQL支持多种数据类型,包括数值类型(如NUMBER)、字符串类型(如VARCHAR2)、日期类型(如DATE)以及Oracle特定的数据类型如REF、BLOB等。 3. **控制流语句**:PL/SQL包含条件语句(IF....

    Oracle2BPL-SQL.rar_oracle_pl/sql

    理解每种数据类型的用途和限制是学习PL/SQL的基础。 2. **流程控制语句**:包括条件判断(IF-THEN-ELSIF-ELSE)、循环(FOR、WHILE、LOOP)和异常处理(BEGIN-EXCEPTION-END)。这些语句使得PL/SQL可以实现复杂的...

    oracle 经典资料及PL/SQL 使用指南 英文版

    这篇“Oracle经典资料及PL/SQL使用指南”的英文版,将帮助学习者深入理解Oracle数据库的基础概念以及PL/SQL的高级用法。 一、Oracle数据库基础 1. 数据库架构:Oracle数据库采用多层架构,包括物理存储层、逻辑...

    PL/SQL学习笔记

    在PL/SQL中,数据类型分为标量类型、复合类型、参考类型和LOB类型。标量类型包括数字类型、字符类型、日期类型和布尔类型等。复合类型包括记录类型和集合类型,其中集合类型又包括数组和表。参考类型是记录的引用,...

    PL/SQL编程(电子版)

    2. 全面的数据类型支持:PL/SQL兼容所有SQL数据类型和Oracle对象类型。 3. 可存储与可重用:PL/SQL块可以被命名并存储在数据库中,便于重复使用,并可通过任何客户/服务器工具访问。 4. 安全性:可以通过Oracle数据...

    PL/SQL编程基础知识

    - **程序包**:集合了一系列相关的子程序、类型定义和其他PL/SQL元素,便于管理和复用。 **2.3 标识符规则** PL/SQL中的标识符遵循以下规则: - 标识符长度不能超过30个字符。 - 第一个字符必须是字母。 - 不区分...

    PL/SQL学习课件

    第四章“使用复合数据类型”会涵盖Oracle中的多种数据类型,如数组、记录和对象类型。这些复合数据类型使得存储和处理复杂数据结构成为可能,对于提高代码效率和灵活性有很大帮助。 第五章“游标”讨论了如何在PL/...

    pl sql web design.rar_oracle_pl sql_pl/sql_web sql

    1. **Oracle PL/SQL基础**:PL/SQL是Procedural Language/Structured Query Language的缩写,它是Oracle为SQL添加的编程组件,支持流程控制、异常处理和子程序定义。在构建网上商店时,我们可能需要编写存储过程、...

Global site tag (gtag.js) - Google Analytics