美文网首页
十、oracle存储过程中的数据结构

十、oracle存储过程中的数据结构

作者: lifeline张 | 来源:发表于2019-04-30 11:45 被阅读0次
    create or replace package TEST_DATATYPE is
    
      TYPE MYRECORD IS RECORD(
        V_ID        A_LOG.ID%TYPE,
        V_PROC_NAME A_LOG.PROCE_NAME%TYPE,
        V_LOG_LEVEL A_LOG.LOG_LEVEL%TYPE,
        V_LOG_INFO  A_LOG.LOG_INFO%TYPE);
    
      PROCEDURE DATATYPE;
    
      FUNCTION TEST_RETURN_RECORD RETURN MYRECORD;
    
    end TEST_DATATYPE;
    
    create or replace package body TEST_DATATYPE is
    
      PROCEDURE DATATYPE IS
        --1、表的列
        /* 我真是个傻逼,为什么在临分处理的时候要定义那么多变量,
        直接用这种数据类型不就完了吗*/
        TABLEROW_A_LOG A_LOG%ROWTYPE;
        --2、记录类型record
        /* 记录类型跟上面的rowtype有很大的区别吗,感觉在用法上可以替代;
        函数的返回值可以是record类型的
        */
        RECORD1 MYRECORD;
        --3、数组类型array 和 varray(varray与array在以下用法上完全相同)
        /* 3.1、声明和初始化可以分开
           3.2、初始化的长度就是实际长度,该长度不能超过定义时的长度
           3.3、在初始化的基础上进行长度扩充时,必须先用extend
           3.4、扩充之后的长度不得超过定义时的长度
           3.5、扩充之后的值默认为空
        */
        TYPE MYARR IS ARRAY(7) OF VARCHAR2(10); --定义
        ARR1 MYARR; --声明
        ARR2 MYARR := MYARR('A', 'B', 'C');
        ---4、table  分为加INDEX BY BINARY_INTEGER和不加INDEX BY BINARY_INTEGER两种
        /* 4.1、声明和初始化
                没加:声明和初始化可以分开
                加:  只能进行声明,不能初始化,赋值只能按下标一个一个赋值
           4.2、扩充
                没加:扩充必须要先用extend
                加:直接按下标赋值即可
           注:团险拆分责任的时候应该用加了index的table来存储找到的责任
        */
        TYPE MYTABLE IS TABLE OF VARCHAR2(10);
        TABLE1 MYTABLE := MYTABLE('1', '2');
        TABLE2 MYTABLE;
        TYPE MYTABLE2 IS TABLE OF VARCHAR2(10) INDEX BY BINARY_INTEGER;
        TABLE4 MYTABLE2;
        --5、table  加index by varchar2(32)
        /* 4.1、只能进行声明,不能初始化
           4.2、有自己特殊的赋值方式
           4.3、key值唯一
           4.4、有自己特殊的遍历方式
        */
        TYPE MYTABLE_VAR IS TABLE OF VARCHAR2(32) INDEX BY VARCHAR2(10);
        TABLE5 MYTABLE_VAR;
        V_KEY VARCHAR2(10);
      BEGIN
        --2、记录类型测试
        RECORD1 := TEST_RETURN_RECORD;
        DBMS_OUTPUT.PUT_LINE(RECORD1.V_ID);
        --3、数据array测试
        DBMS_OUTPUT.PUT_LINE('数组测试');
        ARR1 := MYARR('1', '2'); --初始化
        ARR1.EXTEND; --长度扩充
        ARR1(3) := '5';
        ARR1.EXTEND;
        DBMS_OUTPUT.PUT_LINE('数组定长:' || ARR1.LIMIT);
        DBMS_OUTPUT.PUT_LINE('数组实际长度:' || ARR1.COUNT);
        DBMS_OUTPUT.PUT_LINE('数组首位元素下标:' || ARR1.FIRST);
        DBMS_OUTPUT.PUT_LINE('数组末位元素下标:' || ARR1.LAST);
        FOR I IN 1 .. ARR1.COUNT LOOP
          DBMS_OUTPUT.PUT_LINE(ARR1(I));
        END LOOP;
        FOR I IN 1 .. ARR2.COUNT LOOP
          DBMS_OUTPUT.PUT_LINE(ARR2(I));
        END LOOP;
        --4、table测试
        DBMS_OUTPUT.PUT_LINE('table测试');
        DBMS_OUTPUT.PUT_LINE('table定长:' || TABLE1.LIMIT);
        DBMS_OUTPUT.PUT_LINE('table实际长度:' || TABLE1.COUNT);
        DBMS_OUTPUT.PUT_LINE('table首位元素下标:' || TABLE1.FIRST);
        DBMS_OUTPUT.PUT_LINE('table末位元素下标:' || TABLE1.LAST);
        --4、1、初始化
        TABLE2 := MYTABLE('A', 'B', 'C', 'D');
        --4.2、增加值
        TABLE1.EXTEND(2);
        TABLE1(4) := '4';
        FOR I IN 1 .. TABLE1.COUNT LOOP
          DBMS_OUTPUT.PUT_LINE(TABLE1(I));
        END LOOP;
        FOR I IN 1 .. TABLE2.COUNT LOOP
          DBMS_OUTPUT.PUT_LINE(TABLE2(I));
        END LOOP;
        TABLE4(1) := 'a';
        TABLE4(2) := 'b';
        FOR I IN 1 .. TABLE4.COUNT LOOP
          DBMS_OUTPUT.PUT_LINE(TABLE4(I));
        END LOOP;
        --5、table测试
        TABLE5('KEY1') := 'KEY1';
        TABLE5('KEY1') := 'KEY11';
        TABLE5('KEY3') := 'KEY13';
        V_KEY := TABLE5.FIRST;
        LOOP
          DBMS_OUTPUT.PUT_LINE(V_KEY || '--->' || TABLE5(V_KEY));
          V_KEY := TABLE5.NEXT(V_KEY);
          EXIT WHEN V_KEY IS NULL;
        END LOOP;
      END DATATYPE;
    
      FUNCTION TEST_RETURN_RECORD RETURN MYRECORD IS
        RECORD1 MYRECORD;
      BEGIN
        SELECT A.ID, A.PROCE_NAME, A.LOG_LEVEL, A.LOG_INFO
          INTO RECORD1
          FROM A_LOG A
         WHERE ROWNUM = 1;
        RETURN RECORD1;
      END TEST_RETURN_RECORD;
    end TEST_DATATYPE;
    
    

    相关文章

      网友评论

          本文标题:十、oracle存储过程中的数据结构

          本文链接:https://www.haomeiwen.com/subject/svbmnqtx.html