一、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程序设计笔记精要 ...掌握PL/SQL的不同块类型及其使用方法对于开发高效、可靠的数据库应用程序至关重要。此外,熟悉存储过程和触发器的创建与使用,将有助于提升应用程序的性能和数据安全性。
2. **变量和数据类型**:PL/SQL支持多种数据类型,包括数值型(如NUMBER)、字符型(VARCHAR2和CHAR)、日期型(DATE)、布尔型(BOOLEAN)以及复合和对象类型。 3. **流程控制**:PL/SQL提供了IF-THEN-ELSIF-ELSE...
- **新特性概述**:介绍Oracle 11g中引入的与PL/SQL相关的新增功能,例如新的数据类型、函数、性能优化技术等。 - **性能提升技术**:提供了一些具体的例子和最佳实践,展示了如何利用Oracle 11g的新特性来进一步...
此外,书中还涉及到了ORACLE数据库的安装、存储过程的编写、序列操作、数据类型转换、程序设计指导原则、合并数据库中的数据行(MERGE)、约束、索引、子查询、分页技术等高级主题。 最后,还有关于字符串、数值、...
2. **复合数据类型**:介绍PL/TABLE、记录类型(%ROWTYPE)以及集合类型(VARRAY和NESTED TABLE),这些都是处理大量数据或构建复杂数据结构的关键工具。 3. **游标**:讲解如何使用显式和隐式游标进行查询和遍历...
Oracle PL/SQL是一种强大的编程语言,它将SQL与过程编程语言的特性相结合,为数据库开发提供了丰富的功能。在Oracle数据库环境中,PL/SQL是开发高效、可靠和可维护的数据库应用程序的关键工具。以下是对"Oracle PL/...
《ORACLE PL/SQL 程序设计(第五版)》是Oracle数据库开发领域的一本经典教程,专注于讲解如何使用PL/SQL这一强大的过程化语言进行数据库编程。这本书旨在帮助读者掌握PL/SQL的基本概念、语法和高级特性,以便在实际...
6. **子程序**:PL/SQL支持函数和过程的定义,这些子程序可以在多个地方重复使用,降低了代码的冗余。 7. **包(Packages)**:包是将相关的类型、变量、常量、过程和函数组合在一起的命名实体,便于管理和重用。 ...
9. **性能优化**:学习PL/SQL的性能调优技巧,如减少数据库访问、有效使用绑定变量、避免不必要的数据类型转换等。 10. **并发控制**:理解锁定机制和并发问题,如死锁和幻读,以及如何通过隔离级别来解决这些问题...
"PLSQL.zip_oracl_oracle pl/sql ppt_pl sql ppt tutorial_pl/sql plsql.ppt"这个压缩包提供了学习PL/SQL的基础材料,通过"第一章 pl-sql介绍.ppt"开始你的学习之旅,逐步探索这个强大而灵活的数据库编程语言。
2. **变量和数据类型**:深入学习PL/SQL中的变量声明,包括内置的数据类型(如NUMBER、VARCHAR2、DATE等),以及如何初始化和操作这些变量。 3. **控制流程语句**:学习条件判断(IF-THEN-ELSIF-ELSE)和循环结构...
2. **变量和数据类型**:PL/SQL支持多种数据类型,包括数值类型(如NUMBER)、字符串类型(如VARCHAR2)、日期类型(如DATE)以及Oracle特定的数据类型如REF、BLOB等。 3. **控制流语句**:PL/SQL包含条件语句(IF....
理解每种数据类型的用途和限制是学习PL/SQL的基础。 2. **流程控制语句**:包括条件判断(IF-THEN-ELSIF-ELSE)、循环(FOR、WHILE、LOOP)和异常处理(BEGIN-EXCEPTION-END)。这些语句使得PL/SQL可以实现复杂的...
这篇“Oracle经典资料及PL/SQL使用指南”的英文版,将帮助学习者深入理解Oracle数据库的基础概念以及PL/SQL的高级用法。 一、Oracle数据库基础 1. 数据库架构:Oracle数据库采用多层架构,包括物理存储层、逻辑...
在PL/SQL中,数据类型分为标量类型、复合类型、参考类型和LOB类型。标量类型包括数字类型、字符类型、日期类型和布尔类型等。复合类型包括记录类型和集合类型,其中集合类型又包括数组和表。参考类型是记录的引用,...
2. 全面的数据类型支持:PL/SQL兼容所有SQL数据类型和Oracle对象类型。 3. 可存储与可重用:PL/SQL块可以被命名并存储在数据库中,便于重复使用,并可通过任何客户/服务器工具访问。 4. 安全性:可以通过Oracle数据...
- **程序包**:集合了一系列相关的子程序、类型定义和其他PL/SQL元素,便于管理和复用。 **2.3 标识符规则** PL/SQL中的标识符遵循以下规则: - 标识符长度不能超过30个字符。 - 第一个字符必须是字母。 - 不区分...
第四章“使用复合数据类型”会涵盖Oracle中的多种数据类型,如数组、记录和对象类型。这些复合数据类型使得存储和处理复杂数据结构成为可能,对于提高代码效率和灵活性有很大帮助。 第五章“游标”讨论了如何在PL/...
1. **Oracle PL/SQL基础**:PL/SQL是Procedural Language/Structured Query Language的缩写,它是Oracle为SQL添加的编程组件,支持流程控制、异常处理和子程序定义。在构建网上商店时,我们可能需要编写存储过程、...