Oracleでは、PL/SQL言語を用いて、サーバ上にストアド・プロシージャを作成することができます。もちろん、DOAからストアドプロシージャを呼び出すことが可能です。ここでは、以下のようにPL/SQLストアドプロシージャの使い方を分類し、それぞれの方法を実例を用いて説明します。
なお、このページに示すTOracleQueryの利用法については基本的な仕組みとして一通り目を通した上で、カーソル変数を返すもの以外の場合には
TOraclePackage を使うことをおすすめします。
|
作成方法
|
機能
|
説明セクション
|
|---|---|---|
| 独立のプロシージャ | データ更新のみ | 更新ストアドプロシージャ(入力パラメータのみ) |
| データ更新+ 出力パラメータ |
||
| (データ更新+) 戻り値を返す |
ストアドファンクション(入力パラメータ)=>戻り値 | |
| パッケージ・プロシージャ | データ更新のみ | パッケージ・プロシージャ |
|
|
(データ更新+) 戻り値を返す |
パッケージ・ファンクション |
| データ検索 | カーソル変数を返すパッケージ・プロシージャ | |
| 独立のプロシージャ | データ検索 | カーソル変数を返すプロシージャ |
データを更新し、戻り値のないPL/SQLプロシージャの呼び出しは簡単です。例えば以下のようなプロシージャの場合は
create or replace procedure TestProc1(N IN NUMBER) is
i number;
begin
for i in 1 .. 10 loop
insert into testtable values (i, 'test')
end loop;
end TestProc1;
TOracleQueryコンポーネントのSQLプロパティに、以下のようにプロシージャ呼び出しを行うPL/SQL無名ブロックを記述してExecuteメソッドを実行すればよいのです。簡単ですね。
BEGIN
TestProc1(10);
END;
引数をアプリケーションから与えたい場合は、変数を使います。
//OracleQuery1.SQL = 'BEGIN TestProc(:N); END;'
// Integer型のInput Variableとして N を定義
with OracleQuery1 do begin
SetVariable('N', 10);
Execute;
end;
戻り値を返すPL/SQLファンクションを呼び出す場合は、戻り値を変数に代入する形式のPL/SQL無名ブロックをTOracleQueryのSQLに記述してExecuteメソッドを呼びます。例えば、以下のような関数を呼ぶには...
create or replace function With_Tax(AValue in number) return number is
Result number;
begin
Result := floor(AValue * 1.05);
return(Result);
end With_Tax;
このようにします。(
TOraclePackageを使うともっと簡単です)
//OracleQuery1.SQL =
// BEGIN
// :Result := With_Tax(:N);
// END;
//
// Integer型のInput Variableとして N を定義
// Integer型のOutput VariableとしてResultを定義
with OracleQuery1 do begin
SetVariable('N', 100);
Execute;
Showmessage('結果は' + IntToStr(GetVariable('Result')));
end;
入力パラメータと出力パラメータの両方を持つプロシージャの呼び出しは以下のように行います。(TOraclePackageを使った方が簡単です)
create or replace procedure TestProc2(N IN NUMBER, R OUT NUMBER) is
begin
R := N * N;
end TestProc2;
は...以下のようなPL/SQLブロックで呼び出します
BEGIN
TestProc2(:N, :R);
END;
このとき
N -- Integer型のInput変数
R -- Integer型のOutput変数として宣言して
with OracleQuery1 do begin
SetVariable('N', 100);
Execute;
Showmessage('結果は' + IntToStr(GetVariable('R')));
end;
