zoukankan      html  css  js  c++  java
  • PL/SQL:集合类型 (定义,分类,使用场景,集合方法)

    单行单列     变量    
    单行多列     记录    
    多行单列     集合    
    多行多列     记录+集合

    https://blog.csdn.net/crzzyracing/article/details/77096891

    定义:

           集合是相同类型元素的组合。数据库中相当于"多行单列", 类似于数组, 使用唯一的下标来标识其中的每个元素

    1、索引表
    TYPE type_name IS TABLE OF element_type INDEX BY index_type;  

    table_name            type_name ; 

    element_type:集合中的元素的类型。如number、char, 也可以是记录

    index_type    :只能是整型或者字符串 pls_integer , binary_integer or char

    DECLARE
        type acct_num_type IS TABLE OF VARCHAR2(20) INDEX BY pls_integer;
        acct_num_tab acct_num_type;
        v_index pls_integer :=0;
    BEGIN
        FOR i IN (SELECT ACCT_NUM FROM ACCOUNT WHERE ROWNUM<5) LOOP
            v_index := v_index+1;
            acct_num_tab(v_index) := i.ACCT_NUM;
        END LOOP;
        
        FOR i IN acct_num_tab.FIRST .. acct_num_tab.LAST LOOP
            DBMS_OUTPUT.PUT_LINE(acct_num_tab(i));
        END LOOP;
    END;
    /

    2、嵌套表
    TYPE type_name IS TABLE OF element_type ;
    table_name            type_name ; 

    嵌套表和索引表区别:
    嵌套表没有index by,其下标固定为整型
    必须使用和其同名的构造器函数对其初始化
    因为当声明嵌套表时, 其本身被设置为null. 为了引用嵌套表中的单个元素, 必须先使用同名构造器函数对他初始化
    嵌套表的构造器函数与嵌套表完全同名, 可以带参也可以无参
    带参: coll_name := coll_name ('firstname', 'lastname');
    无参: coll_name := coll_name ();
    循环遍历时,必须持续使用 .extend() 方法分配存储空间
    ————————————————

    DECLARE
        type acct_num_type IS TABLE OF VARCHAR2(20);
        acct_num_tab acct_num_type;
        v_index pls_integer :=0;
    BEGIN
        acct_num_tab := acct_num_type();
        FOR i IN (SELECT ACCT_NUM FROM ACCOUNT WHERE ROWNUM<5) LOOP
            v_index := v_index+1;
            acct_num_tab.extend;
            acct_num_tab(v_index) := i.ACCT_NUM;
        END LOOP;
        
        FOR i IN acct_num_tab.FIRST .. acct_num_tab.LAST LOOP
            DBMS_OUTPUT.PUT_LINE(acct_num_tab(i));
        END LOOP;
    END;
    /

    3、变长数组

    定义:

             有最大长度限制的嵌套表, 编码上和嵌套表完全相同

    语法:

    TYPE type_name IS  VARRAY(最大值) OF element_type;

    varray_name type_name ;

    DECLARE
        type acct_num_type IS ARRAY(5) OF VARCHAR2(20);
        acct_num_tab acct_num_type;
        v_index pls_integer :=0;
    BEGIN
        acct_num_tab := acct_num_type();
        FOR i IN (SELECT ACCT_NUM FROM ACCOUNT WHERE ROWNUM<5) LOOP
            v_index := v_index+1;
            acct_num_tab.extend;
            acct_num_tab(v_index) := i.ACCT_NUM;
        END LOOP;
        
        FOR i IN acct_num_tab.FIRST .. acct_num_tab.LAST LOOP
            DBMS_OUTPUT.PUT_LINE(acct_num_tab(i));
        END LOOP;
    END;
    /
  • 相关阅读:
    【Cookie】java.lang.IllegalArgumentException An invalid character [32] was present in the Cookie value
    【会话技术】Cookie技术 案例:访问时间
    进程池
    管道和Manager模块(进程之间的共享内容)
    队列
    锁Lock,信号量Semaphore,事件机制Event
    multiprocess模块
    进程
    reduce
    struct模块
  • 原文地址:https://www.cnblogs.com/kakaisgood/p/12711455.html
Copyright © 2011-2022 走看看