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;
			