Oracleストアド・プロシージャ-カスタム・データ型、コレクション、遍歴値

4311 ワード

サマリ
Oracleストアド・プロシージャ、カスタム・データ型、コレクション、遍歴値
ディレクトリ[-]
  • 0.前言
  • 1.Packages
  • 2.Packages bodies
  • 3.出力結果
  • 0.はじめに
    Oracleのストレージでは、現在の機能がPackagesにある場合、データ処理が発生する可能性があります.
    Packagesは複数の異なる機能のProcedureをカプセル化しており、1つのProcedureで統計を取ります.
    別のProcedureで計算するには、結果セットを格納する場所が必要です.
    従来のソリューションは、テンポラリ・テーブルを作成し、データを統計した後、テンポラリ・テーブルに挿入することです.
    別のProcedureでデータを取り出し、計算を行うと読み書き操作でパフォーマンスが無駄になります
    Oracleのカスタム・データ型を使用して、コレクションを作成し、操作できます.
    1.Packages
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14 create or replace package test_lu is
         -- Author  : LUJIANING    -- Created : 2014-3-12 11:27:34    -- Purpose :         -- Public type declarations    procedure test1;         procedure test2;         procedure test3;
      end test_lu;
    2.Packages bodies
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40 create or replace package body test_lu is    ---    TYPE c_user IS RECORD      (   id number,          name varchar2(30)      );     ---    TYPE c_user_array IS TABLE OF c_user INDEX BY BINARY_INTEGER;     ---    user_array c_user_array;    ---    user c_user;    ---    v_counter number;              procedure test1 is    begin      user .id:=1;      user . name := 'luu' ;      user_array( user .id):= user ;             user .id:=2;      user . name := 'lii' ;      user_array( user .id):= user ;              end ;         procedure test2 is    begin      for v_counter in 1..user_array. count loop        DBMS_OUTPUT.put_line(user_array(v_counter).id|| '...' ||user_array(v_counter). name );      end loop;           end ;         procedure test3 is    begin      test1;      test2;    end ; end test_lu;
    3.出力結果
    ?
    1
    2 1...luu 2...lii