アプリケーションと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およびネストした表を除く)、IN
、OUT
またはIN OUT
パラメータとしてサポートします。「アプリケーションからの連想配列の使用」を参照してください。
「入力パラメータ、出力パラメータおよびバインド変数を使用する例」を参照してください。