`
ghyghoo8
  • 浏览: 193170 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

PL/SQL集合

阅读更多
索引表(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;

分享到:
评论

相关推荐

    pl/sql最新中文手册

    6. **复合类型**:PL/SQL支持数组、集合和记录等复合类型,这些使得处理复杂数据结构变得可能。手册会详细介绍这些类型的创建和使用。 7. **包(Packages)**:包是将相关的过程、函数和变量封装在一起的一种方式,...

    pl/sql集合相关例子

    ### PL/SQL 集合相关知识点详解 #### 一、概述 在PL/SQL中,集合(Collections)是一类非常重要的数据结构,用于存储多个相同类型的数据元素。这些元素可以是基本数据类型如`NUMBER`、`VARCHAR2`等,也可以是复杂...

    oracle pl/sql从入门到精通 配套源代码

    此外,PL/SQL还支持集合类型,如VARRAY(可变数组)和TABLE(表类型),这对于处理大量数据非常有用。 这本书的配套源代码可能会涵盖以下几个方面: 1. **基础操作**:包括简单的SQL查询、变量声明、流程控制...

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

    - **集合与记录**:学习如何使用PL/SQL中的集合和记录类型,这些结构可以帮助更高效地处理数据集。 - **游标**:介绍游标的使用方法,包括隐式游标和显式游标,以及如何利用游标遍历查询结果。 #### 四、PL/SQL中的...

    ORACLE PL/SQL从入门到精通

    PL/SQL软件包是一组相关的过程和函数的集合,它可以用来组织和管理程序。软件包由两部分组成,说明部分和包体部分,分别用于声明公共接口和实现逻辑。 异常处理在PL/SQL中用来处理程序运行时发生的错误。PL/SQL预定...

    PL/SQL语法帮助

    - **记录和集合**:用于存储多条数据,可以是自定义类型的记录或标准的PL/SQL集合类型。 - **包**:封装相关的过程、函数和变量,提供模块化的代码组织。 学习PL/SQL不仅有助于你更好地管理Oracle数据库,还能提升...

    PL/SQL编程基础知识

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

    PL/SQL doc 文件

    * 包:是一组相关的 PL/SQL 程序块的集合。 * 触发器:是一种特殊的存储程序,用于自动执行某些操作。 定义函数的语法: CREATE [OR REPLACE] FUNCTION function_name [(argument [IN|OUT|IN OUT] datatype)] ...

    Oracle Database 12c PL/SQL开发指南 实例源代码

    5. **集合类型**:包括数组(PLS_INTEGER索引的PL/SQL表)和关联数组(索引由非数字类型的值定义),以及如何在集合中插入、删除和迭代元素。 6. **包(PACKAGE)**:创建和使用包来组织相关的过程和函数,实现模块...

    PL/SQL入门到精通书的源代码

    5. **过程与函数**:过程是一组PL/SQL语句的集合,用于执行特定任务。函数与过程类似,但返回一个值。它们可以提高代码的复用性和模块化。 6. **异常处理**:PL/SQL提供了一个强大的异常处理机制,允许你定义和捕获...

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

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

    PL/SQL安装包

    5. **数据操作**:除了标准的SQL查询,PL/SQL还支持集合操作,如BULK COLLECT和FORALL,可以高效地处理大量数据。 6. **游标**:PL/SQL中的游标允许逐行处理查询结果,是处理复杂数据操作的重要工具。 7. **记录...

    pl/sql开发

    2.2 **PL/SQL集合** 集合是一组相同类型的元素,分为索引数组和关联数组。索引数组通过数字索引访问,关联数组则通过键值对访问,如VARRAY(固定大小数组)和TABLE(动态大小数组)。 ### 3. PL/SQL中的SQL 3.1 *...

    PL/SQL编程(电子版)

    **4.3 存储过程** 是预编译的PL/SQL代码集合,可以接受输入参数,返回结果,提高效率并简化代码管理。 **4.4 触发器** 是在特定数据库事件(如INSERT、UPDATE或DELETE)发生时自动执行的PL/SQL代码,常用于实现业务...

    pl/sql 学习资料

    - 表类型:使用PL/SQL表类型进行集合操作。 -记录类型:定义和使用记录类型,类似于结构或对象。 5. **程序单元**: - 包(PACKAGE):定义公共接口和私有实现,提高代码复用性。 -存储过程和函数:创建存储在...

    Oracle PL/SQL程序设计(第5版)(下册)第二部分

    《Oracle PL/SQL程序设计(第5版)》基于Oracle数据库11g,从PL/SQL编程、PL/SQL程序结构、PL/SQL程序数据、PL/SQL中的SQL、PL/SQL应用构建、高级PL/SQL主题这6个方面详细系统地讨论了PL/SQL以及如何有效地使用它。...

    精通pl/sql

    5. **集合类型**:讨论PL/SQL中的集合类型,如数组、关联数组、表类型和索引表,以及它们在处理大量数据时的优势。 6. **包(PACKAGE)**:解释如何创建和使用包,包括包规范(PACKAGE SPECIFICATION)和包体...

    oracle 中 pl/sql 只是学习方法

    3. **集合和游标**:集合是PL/SQL中处理多行数据的有效工具,如VARRAYs(固定大小数组)和associative arrays(关联数组)。游标则允许我们一行一行地处理查询结果,是处理动态数据的重要手段。 4. **存储过程和...

    PL/SQL examples

    - `sorts.pkg`:可能包含如何在PL/SQL中对数据进行排序的示例,可能涉及到嵌套表或集合的排序,或者使用BULK COLLECT和ORDER BY子句。 6. **统计分析(Stats.pkg)** - `stats.pkg`:这部分可能涉及在PL/SQL中...

    PL/SQL development9.0.3

    2. **变量和数据类型**:PL/SQL支持多种内置数据类型,如NUMBER、VARCHAR2、DATE等,以及PL/SQL特有的记录和集合类型。 3. **流程控制语句**:包括IF-THEN-ELSIF-ELSE、CASE、FOR循环、WHILE循环等,用于控制程序的...

Global site tag (gtag.js) - Google Analytics