`
黑鸟酱
  • 浏览: 127257 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

oracle 集合

 
阅读更多
  1. 记录(Record): 由单行多列的标量类型构成的临时记录对象类型
    declare
      type location_record_type is record(
           street_address   varchar2(40),
           postal_code      varchar2(6),
           city             varchar2(10),
           country          char(3) not null :='CHN'
      );
      l_my_loc location_record_type;
    begin
      l_my_loc.street_address := '上海市徐汇区';
      l_my_loc.postal_code := '100003';
      l_my_loc.city := '上海市';
      dbms_output.put_line('我的住址是:'||l_my_loc.street_address||'--'||l_my_loc.city);
    end;
  2. PL/SQL表(table): 同种类型的一维、无边界的稀疏集合(稀疏数组就是数组中大部分的内容值都未被使用(或都为零)),只能用于 PL/SQL
    /*
     * PL/SQL表,在PL/SQL中使用可以模仿数组的非永久表
     */
    declare
      type my_text_table_type is table of varchar2(20) index by binary_integer;
      l_text_type my_text_table_type;
    begin
      l_text_type(1) := 'kevin1';
      l_text_type(2) := 'kevin2';
      dbms_output.put_line('数量'||l_text_type.count||'---'||l_text_type(2));
      /*
       * 删除数据
       */
      l_text_type.delete(1);
      dbms_output.put_line(l_text_type(2));
      /*
       * 删除表
      */
      l_text_type.delete;
    end;
    
    /*
     * 遍历表
     */
    declare
      type my_text_table_type is table of varchar2(200) index by binary_integer;
      l_text_table my_text_table_type;
      l_index number;
    begin
     for emp_rec in (select * from emp) loop
       l_text_table(emp_rec.empno) := emp_rec.ename;
     end loop;
     --取得第一个索引
     l_index := l_text_table.first;
     loop
       exit when l_index is null;
       dbms_output.put_line(l_index||':'||l_text_table(l_index));
       --取得下一个索引
       l_index := l_text_table.next(l_index);
     end loop;
    end;
      
  3. 变量数组(varray): 同种类型的一维对象集合,它是有界且不稀疏的。在定义 VARRAYs 时要指定它的最大范围。可以在 PL/SQL 和 Database 中被定义,但它其中的元素是有顺序的
    declare
      type my_text_varray_type is varray(2) of varchar2(10);--创建Collection,需要指定最大的范围
      l_text_varray my_text_varray_type:=my_text_varray_type();--创建instance,需要使用够着函数
      l_index number;
    begin
      l_text_varray.extend(2);--赋值前需要分配空间,不能超过最大范围
      l_text_varray(1):='aaa';
      l_text_varray(2):='bbb';
      l_index := l_text_varray.first;
      for var_index in l_index..l_text_varray.count loop
        dbms_output.put_line(l_text_varray(var_index));
        l_index := l_text_varray.next(l_index);
      end loop;
    end;
     
  4. 嵌套表(Nested tables): 同种类型的一维无边界对象集合,可以在 PL/SQL 和 Database(某一列为一个嵌套表)中被定义
    declare
      type my_nestedTable_type is table of varchar2(10);--创建集合,和PL/SQL表相差一个index by 
      l_nestedTable1 my_nestedTable_type:=my_nestedTable_type(); --创建instance,需要使用构造函数
      l_nestedTable2 my_nestedTable_type:=my_nestedTable_type();
      l_nestedTable3 my_nestedTable_type:=my_nestedTable_type();
      begin
        l_nestedTable1.extend(2); --赋值前需要分配空间
        l_nestedTable1(1):='aaa';
        l_nestedTable1(2):='bbb';
        l_nestedTable2.extend;--分配一个空间
        l_nestedTable2(1):='bbb';
        l_nestedTable3:=l_nestedTable1 multiset except l_nestedTable2;
        for l_row in l_nestedTable1.first..l_nestedTable1.last loop
            dbms_output.put_line(l_nestedTable1(l_row));
        end loop;
      end;
     
  5. example:
    /**
     * PL/SQL table,nested table,varray in record
     */
    declare
      type my_table is table of varchar2(10) index by binary_integer;
      type my_nestedTable is table of varchar2(20);
      type my_varray is varray(2) of varchar2(10);
      type my_table_in_record is record(
           l_table            my_table,
           l_nestedTable     my_nestedTable:=my_nestedTable(),
           l_varray          my_varray:=my_varray()
      );
      l_record my_table_in_record;
      begin
        --初始化PL/SQL表
        l_record.l_table(1):='table1';
        l_record.l_table(2):='table2';
        --初始化嵌套表
        l_record.l_nestedTable.extend(2);
        l_record.l_nestedTable(1):='nestedTable1';
        l_record.l_nestedTable(2):='nestedTable2';
        --初始化变量数组
        l_record.l_varray.extend(2);
        l_record.l_varray(1):='varray1';
        l_record.l_varray(2):='varray2';
        
        --打印
        for index_var in l_record.l_varray.first..l_record.l_varray.last loop
            dbms_output.put_line(l_record.l_varray(index_var));
        end loop;
      end;
    
    /*
     * record in table
     */
    declare
      type my_record is record(
           name      varchar2(20),
           id        positive,
           gender    integer(1)
      );
      type my_table is table of my_record index by binary_integer;
      l_table my_table;
    begin
      l_table(1).name:='bbb';
      l_table(1).id:=1;
      l_table(1).gender:=1;
      l_table(2).name:='aaa';
      l_table(2).id:=2;
      l_table(2).gender:=0;
      for index_var in l_table.first..l_table.last loop
          dbms_output.put_line(l_table(index_var).name||'--'||l_table(index_var).id||'--'||l_table(index_var).gender);
      end loop;
    end;
     
  6. Choosing a Collection Type
        1.如果要用稀疏 array,那么只能使用 associative array,虽然可以先分配 nested table 在删除其中的项目,但效率很低
        2.如果在 PL/SQL 中要用负数的下标,只能用 associative array
        3.如果使用 10g,希望使用 set 层面的操作,那么选择 nested tables + MULTISET EXCEPT 的方法
        4.如果要限制存储的行数,使用 VARRAYs
        5.如果要在 column 中存储大数据量集合,那么使用 nested table,Oracle可以使用单独的表来存储它
        6.如果你想将存在 collection column 中的数据保持原有顺序,并且数据量很小,可以使用 VARRAY,小的概念可以按照 BLOCK 的大小来判断,如果数据量超过一个 BLOCK,将会产生行连接
分享到:
评论

相关推荐

    Oracle集合操作函数union、intersect、minus.docx

    Oracle 集合操作函数 union、intersect、minus Oracle 集合操作函数是用于合并多条 SELECT 语句的结果的函数,包括 UNION、INTERSECT、MINUS 等。这些函数可以将多个查询结果合并成一个结果集,以便进一步处理和...

    oracle集合union、union all、intersect、minus

    Oracle 集合操作详解 Oracle 集合操作是指在数据库中对数据进行集合运算的操作,包括 union、union all、intersect 和 minus 等操作。这些操作可以对数据进行合并、交叉、差异等处理,提高数据处理效率。 union ...

    Oracle集合类型输出参数的PLSQL存储过程及其Java调用.docx

    ### Oracle集合类型输出参数的PL/SQL存储过程及其Java调用 #### 1. 引言 存储过程因其高效执行、事务处理能力以及安全性,在数据库应用程序中被广泛应用。特别是使用Oracle数据库时,PL/SQL(一种专为Oracle设计的...

    Oracle集合类型输出参数的PLSQL存储过程及其Java调用.doc

    Oracle集合类型输出参数的PL/SQL存储过程及Java调用主要涉及如何在Oracle数据库中使用存储过程处理集合数据,并在Java应用中调用这些过程。本文档介绍了一种使用索引表作为输出参数的方法,以及如何在Java中处理返回...

    Oracle集合运算.pdf

    本资源涵盖知识(包括使用案例):Oracle集合运算,交集、并集、补集、差集. 集合运算就是将多个结果集组合成一个结果集。

    oracle sql集合

    ### Oracle SQL 集合知识点详解 #### 一、Oracle 安装完成后的初始口令 在Oracle数据库安装完成后,存在一系列预设的账号及其初始密码。这些账号对于数据库的安全性和管理至关重要。以下是一些常见账号及其初始口令...

    Oracle PLSQL集合

    ### Oracle PL/SQL 集合详解 #### 12.1 集合概述 在深入了解Oracle PL/SQL中的集合之前,先回顾一下与集合相关的概念和术语,包括不同集合类型的描述及其示例。 ##### 12.1.1 集合概念和术语 **元素和索引值** -...

    Oracle三种集合数据类型的比较

    Oracle数据库系统提供了多种数据类型,其中包括了三种主要的集合数据类型:VARRAY(变量数组)、NESTED TABLE(嵌套表)和 Associative Array(关联数组,也称为INDEX BY TABLE)。这三种集合数据类型在存储和操作一...

    oracle 高级教程 深入学习集合!

    本教程的"Oracle高级教程-深入学习集合"将详细阐述以上各个主题,并提供丰富的示例和练习,帮助读者熟练掌握Oracle集合的使用,进一步提升数据库管理与开发的专业水平。通过阅读并实践,你将能够更好地应对复杂的...

    oracle集合程序

    这是有关oracle的集合,供大家分享,虽然有很多错误,但也供大家讨论。

    Oracle基本操作集合

    学Oracle的好东西,适合初学者,集合了大部分基本操作命令的实现

    oracle 数据库操作 集合

    oracle 创建表空间和用户; oracle job的创建及相关命令; oracle 触发器或存储过程中执行外部exe程序; oracle 导入导出; oracle 删除所有表的数据; sqlserver 读取excel

    Oracle的错误集合

    在Oracle数据库管理中,经常会遇到各种错误,本文主要讨论了三个常见的Oracle错误及其解决方案。 首先,关于用户和修改用户密码的问题。Oracle数据库默认有一些预设的用户名和密码,例如Scott/tiger,System/...

    初学者必备oracle 1000个常用命令_oracle 命令大全_oracle命令集合

    oracle 常用命令_oracle 命令大全_oracle命令集合_oracle基本命令 非常方便,带查询功能,能很方便的查询你要找的oracle命令写法

    ORCL数据库相关文档.rar_ORCL数据集合_Oracle命令集合_busy7dm_globewxf_oracle

    在"ORCL数据库相关文档.rar"这个压缩包中,我们可以找到一系列关于Oracle数据库的重要资料,尤其是"Oracle命令集合"部分,它涵盖了Oracle数据库管理和操作的各种常见命令。 首先,创建实例是Oracle数据库管理的基础...

    oracle日常巡检命令集合

    "oracle日常巡检命令集合" Oracle日常巡检命令集合是数据库管理员最重要的工具之一,通过这些命令,可以检查数据库的状态、性能和安全性。以下是oracle日常巡检命令集合的详细说明: 检查数据库基本状况 1.1. ...

    Java调用oracle函数返回oracle类(类似)集合

    在Java中调用Oracle函数并处理返回的Oracle特定数据类型,如集合或索引表,通常涉及到Oracle的PL/SQL包和Java的JDBC驱动。以下是对这个主题的详细说明: 1. **Oracle索引表类型**: Oracle索引表是一种PL/SQL数据...

    Oracle资料大全(集合)

    Oracle资料大全集合是一个涵盖Oracle数据库系统方方面面的综合资源包,对于学习、研究或者工作中需要处理Oracle相关问题的人员来说,是一份极其宝贵的参考资料。Oracle,作为全球广泛使用的大型关系型数据库管理系统...

    oci8源码,编译安装php连接oracle扩展

    6. **oci8_collection.c**:提供了对Oracle集合类型的支持,允许在PHP中操作Oracle的数组类型数据。 7. **CREDITS**:列出oci8扩展开发和贡献者的名单,体现了开源社区的协作精神。 8. **oci8.dsp**:可能是Visual...

Global site tag (gtag.js) - Google Analytics