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
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
3.出力結果
?
1
2
Oracleストアド・プロシージャ、カスタム・データ型、コレクション、遍歴値
ディレクトリ[-]
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