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;