zoukankan      html  css  js  c++  java
  • Oracle 积累

    查看命令行脚本执行时间:

    SQL>set timing on;

    ------------------------------------------------------------------------------------

    1、知识点:

    1)ORACLE 一维数组或者多维数组 定义、初始化以及使用

    2)ORACLE PIPELINED 的使用

    3)ORACLE利用INSTR和SUBSTR的字符串操作函数,实现SPLIT函数方法

    2、实例: 

    TYPE para_array IS TABLE OF varchar2(10000) INDEX BY BINARY_INTEGER; --一维字符数组
    TYPE para_array_double IS TABLE OF para_array INDEX BY BINARY_INTEGER; --二维数组
    --根据分隔符P_SEP 分割字符串P_LIST 返回数组 PARA_ARRAY  
    FUNCTION F_SPLIT_STR(P_LIST VARCHAR2, P_SEP VARCHAR2) RETURN PARA_ARRAY  
        PIPELINED IS
        L_IDX  PLS_INTEGER;
        V_LIST VARCHAR2(50) := P_LIST;
      BEGIN
        LOOP
          L_IDX := INSTR(V_LIST, P_SEP);
          IF L_IDX > 0 THEN
            PIPE ROW(SUBSTR(V_LIST, 1, L_IDX - 1));
            V_LIST := SUBSTR(V_LIST, L_IDX + LENGTH(P_SEP));
          ELSE
            PIPE ROW(V_LIST);
            EXIT;
          END IF;
        END LOOP;
        RETURN;
      END F_SPLIT_STR;
    --对字符串以I_SPLIT 分隔符进行分割,返回一维数组para_array 
    FUNCTION F_GET_ARR(I_VALUE IN VARCHAR2,I_SPLIT IN VARCHAR2)
        RETURN para_array IS
        V_ARR        para_array;
        V_VALUE      VARCHAR2(1000);   
        V_COUNT                   NUMBER;   
        V_NUM                     NUMBER;    
        CURSOR C_VALUE IS
            SELECT *
            FROM TABLE(F_SPLIT_STR(I_VALUE,
                        I_SPLIT));
        BEGIN
          V_ARR := para_array();
          V_VALUE := '';
          V_NUM := 1;
          FOR V_CUR_VALUE IN C_VALUE LOOP
            V_VALUE := V_CUR_VALUE.COLUMN_VALUE;
            IF V_VALUE IS NOT NULL THEN
              V_ARR.EXTEND();
              V_ARR(V_NUM) := V_VALUE ;
              V_NUM := V_NUM + 1 ;
            END IF;
          END LOOP;
        RETURN V_ARR;
      END F_GET_ARR;
      --对多次分割的字符串进行分割操作,并返回二维数组para_array_double 
      FUNCTION F_GET_ARR_DOUBLE(I_VALUE_STR IN varchar2)
        RETURN para_array_double IS
        V_VALUE_STR_ARR        para_array;
        V_VALUE_ARR para_array;
        V_VALUE_ARR_DOUBLE    para_array_double;
        V_VALUE VARCHAR2(1000);
        V_NUM                 NUMBER;
      BEGIN
        V_VALUE_STR_ARR := para_array();
        V_VALUE_ARR := para_array();
        V_VALUE_STR_ARR := F_GET_BENF_INSURED_ARR(I_VALUE_STR,';');
        for V_NUM IN 1..V_VALUE_STR_ARR.COUNT loop
            V_VALUE_ARR := F_GET_ARR(V_VALUE_STR_ARR(V_NUM),',');
            V_VALUE_ARR_DOUBLE(V_NUM) := V_VALUE_ARR;
        end loop;
        RETURN V_VALUE_ARR_DOUBLE;
      END F_GET_ARR_DOUBLE;
      --测试用例
      PROCEDURE test_arr(I_TEST_STR IN VARCHAR2, O_MSG OUT VARCHAR2) IS
        V_ARR_DOUBLE  para_array_double;
      BEGIN
       V_ARR_DOUBLE := F_GET_ARR_DOUBLE(I_TEST_STR);
       FOR I IN 1..V_ARR_DOUBLE.COUNT LOOP
         FOR J IN 1..V_ARR_DOUBLE(I).COUNT LOOP
           DBMS_OUTPUT.PUT_LINE(V_ARR_DOUBLE(I)(J));
         END LOOP;
       END LOOP;
       O_MSG := 'TRUE';
      END TEST_ARR;
     
  • 相关阅读:
    Java学习:冒泡排序和选择排序
    Java学习:多态
    Java学习:抽象类与接口
    Java学习:继承
    Java学习:标准类
    Java学习:方法简介
    传参的本质
    new 关键字做的事
    一个引用类型的对象占多大堆空间
    栈中空间大小
  • 原文地址:https://www.cnblogs.com/bonnie-lbn/p/4120787.html
Copyright © 2011-2022 走看看