zoukankan      html  css  js  c++  java
  • PLSQL集合类型

    PLSQL集合类型

     

    --联合数组(索引表)

    /*

    用于存储某个数据类型的数据集合类型 。通过索引获得联合数组中得值

    如下例子:

    */

    DECLARE 

     CURSOR cur_chars IS SELECT chars FROM a;--声明游标

     TYPE str_type IS TABLE OF a.chars%TYPE--声明联合数组

     INDEX BY BINARY_INTEGER; --声明联合数组的索引

     strs str_type;--声明str_type 的联合数组strs

     counts INTEGER := 0;

    BEGIN 

      FOR cur_chars_rec IN cur_chars LOOP

        counts := counts + 1;

        strs(counts) := cur_chars_rec.chars;

        dbms_output.put_line('counts('||counts||'):'||strs(counts));

      END LOOP;

    END;

    这个联合索引类型其实就是表数据的索引,定义游标然后把遍历到的结果存放在联合数组中,就相当于程序的基本数据类型数组

    1.声明游标用来遍历表数据2.声明联合数组用来存储游标遍历的数据集3.声明索引

    4.定义联合数组 联合数组名称 联合数组type

     

    strs(counts) := cur_chars_rec.chars;  联合数组赋值命令

    --嵌套表

    /*

    plsql表类型之一,他与联合数组具有相同的结构,都是使用下标访问数组

    主要区别在于,嵌套表可以存储在数据库表的列中,而联合数组不行

    */

    DECLARE

     CURSOR my_cursor IS SELECT chars FROM a WHERE NUM='ww' ;--定义游标

     TYPE table_type IS TABLE OF a.chars%TYPE;--声明表类型

     table_name table_type:=table_type();--定义并初始化嵌套表

     counts INTEGER := 1;

    BEGIN

      FOR my_cursor_rec IN my_cursor LOOP

        counts := counts;

        table_name.extend;--表做成可扩展的***

        table_name(counts):=my_cursor_rec.chars;

        dbms_output.put_line('counts'||counts||' := '||table_name(counts));

      END LOOP;

    END;

    --创建变长数组

    DECLARE

     TYPE varray_type IS ARRAY(10) OF NUMBER(6);

     varray_name varray_type := varray_type(); --变长数组同嵌套表相同都需要初始化收集

     counts INTEGER := 0;

    BEGIN

      FOR i IN 1..5 LOOP

        counts := counts + 1;

        varray_name.extend;

        varray_name(counts) := i;--这个都是相同的使用下标

        dbms_output.put_line('counts('||counts||'):='||i);

      END LOOP;

    END;

      varray_name.extend; 的使用超过范围的时候需要使用扩展

      集合函数的使用count 数量 first 第一个 last 最后一个

      Varrary_array.count Varrary_array.first  Varrary_array.last

      Varrary_array.trim(4) 从后往前删除4个数组元素

     

    多层集合 集合作为集合的元素

    变长数组为例 就相当于数据的嵌套

    --多层集合(数组的嵌套)

    DECLARE

     TYPE var_type1 IS VARRAY(5) OF INTEGER;--声明变长数组

     TYPE var_type2 IS VARRAY(3) OF var_type1;--声明多层集合,集合元素类型为var_type1

     varray_integer var_type1 := var_type1(1,2,3,4,5);--集合给初始值

     varray_multi var_type2 := var_type2(varray_integer);

    BEGIN

      FOR i IN 1..5 LOOP

        dbms_output.put_line('varray_integer('||i||'):='||varray_integer(i));

      END LOOP;

      

      varray_multi.extend;

      varray_multi(2) := var_type1(6,7,8,9,10);

      

      varray_multi.extend;

      varray_multi(3) := var_type1(5,4,3,2,1);

      

      FOR i IN 1..3 LOOP

       FOR j IN 1..5 LOOP

             dbms_output.put_line('varray_multi['||i||']'||'['||j||']=='||varray_multi(i)(j));

       END LOOP;

      END LOOP;

    END;

     

     

    --集合的方法

    DELETE --删除集合元素

    EXTEND --为集合增加元素空间,实现空间的扩展以填充新元素。

    COUNT --集合元素中的数量

    EXISTS --如果指定的元素在集合中存在,则返回true

    DELETE --删除指定集合位置的元素

    FIRST AND  LAST --集合中的第一个和最后一个元素

    PRIOR AND NEXT --返回集合指定位置的前一个和后一个元素

    TRIM --从集合尾部删除元素

    LIMIT --返回集合允许元素的最大数量

  • 相关阅读:
    Spring Boot2 系列教程(二)创建 Spring Boot 项目的三种方式
    Spring Boot2 系列教程(一)纯 Java 搭建 SSM 项目
    Python 解析XML实例(xml.sax)
    深度学习Tensorflow相关书籍推荐和PDF下载
    气象netCDF数据可视化分析
    Python 操作MySQL 数据库
    用这个库 3 分钟实现让你满意的表格功能:Bootstrap-Table
    浅谈压缩感知(二十六):压缩感知重构算法之分段弱正交匹配追踪(SWOMP)...
    web开发工具flask中文英文书籍-持续更新
    Python 在气象上的应用
  • 原文地址:https://www.cnblogs.com/sun-chao/p/6823709.html
Copyright © 2011-2022 走看看