アプリケーションとPL/SQLとの間でデータを受け渡す方法

この項では、アプリケーションとPL/SQLの間でデータを渡す方法について説明します。

『Oracle Database PL/SQL言語リファレンス』バインド変数を参照してください。

アプリケーションのバインド変数の使用

バインド変数に:var表記を使用すると、アプリケーション(CまたはJavaアプリケーションなど)とPL/SQL間でバインド変数を受け渡すことができます。バインド変数(ホスト変数と呼ばれる場合もあります)という用語は、これまでTimesTenで使用されてきたパラメータという用語と同様に使用し、アプリケーションのバインド変数とは、PL/SQLプロシージャまたはファンクションの仕様部で宣言されたパラメータに相当します。

次に、指定した従業員IDと一致する従業員の名前および給与を取得するPL/SQLプロシージャをコールするときに、ttIsqlを使用する例を示します。この例では、ttIsqlは基本的にコール元のアプリケーションのように動作し、名前および給与はPL/SQLからの出力になります。

Command> VARIABLE b_name VARCHAR2 (25)
Command> VARIABLE b_sal  NUMBER

Command> BEGIN
          query_emp (171, :b_name, :b_sal);
         END;
         /
 
PL/SQL procedure successfully completed.
 
Command> PRINT b_name
B_NAME               : Smith
Command> PRINT b_sal
B_SAL                : 7400

完成例は、入力パラメータ、出力パラメータおよびバインド変数を使用する例」を参照してください。

プロシージャおよびファンクションの作成方法と定義方法については、PL/SQLのプロシージャおよびファンクションを参照してください。

これらの言語に関する追加情報と例は、『Oracle TimesTen In-Memory Database C開発者ガイド』パラメータのバインドと文の実行、および『Oracle TimesTen In-Memory Database Java開発者ガイド』SQL文の準備と入力パラメータの設定を参照してください。

ノート:

  • TimesTenのバインド・メカニズム(アーリー・バインディング)はOracle Databaseのバインド・メカニズム(レイト・バインディング)とは異なります。TimesTenは、問合せの準備の前にデータ型を必要とします。そのため、各バインド・パラメータのデータ型が指定されていないかSQL文から推測できないと、エラーが発生します。たとえば次のような文が、これに該当します。

    SELECT 'x' FROM DUAL WHERE :a = :b;
    

    この問題には、たとえば次のように対処できます。

    SELECT 'x' from DUAL WHERE CAST(:a as VARCHAR2(10)) = 
                               CAST(:b as VARCHAR2(10));
    
  • 重複パラメータについて、TimesTenのPL/SQLでの実装はOracle DatabaseのPL/SQLでの実装と同じです。

  • TimesTen開発者ガイドで使用される「バインド・パラメータ」という用語(ODBC用語に準拠)は、TimesTenのPL/SQLのマニュアルで使用される「バインド変数」という用語(Oracle Database PL/SQL用語に準拠)と同じです。

IN、OUTおよびIN OUTパラメータ・モード

パラメータ・モードは、PL/SQLサブプログラム(プロシージャまたはファンクション)の仕様部で宣言されたパラメータを入力、出力またはその両方のどちらに使用するかを定義します。IN (デフォルト)、OUTおよびIN OUTの3つのパラメータ・モードがあります。

INパラメータでは、起動されるサブプログラムに値を渡すことができます。サブプログラム内では、INパラメータは定数のように動作するため、値を代入することはできません。INパラメータとして、定数、リテラル、初期化された変数または式を渡すことができます。

OUTパラメータは、サブプログラムのコール元に値を戻します。サブプログラム内では、OUTパラメータは変数のように動作します。その値を変更して、代入後に値を参照できます。

IN OUTパラメータは初期値をサブプログラムに渡し、更新された値をコール元に戻します。パラメータに値を代入したり、その値を読み取ることができます。一般的に、IN OUTパラメータは、文字列バッファ、または数値アキュムレータであり、サブプログラム内で読み取られた後に更新されます。IN OUT仮パラメータに対応する実パラメータは、定数や式ではなく、変数である必要があります。

ノート:

TimesTenは、連想配列のバインディングを(ただしVARRAYおよびネストした表を除く)、INOUTまたはIN OUTパラメータとしてサポートします。「アプリケーションからの連想配列の使用」を参照してください。

「入力パラメータ、出力パラメータおよびバインド変数を使用する例」を参照してください。