準備済みステートメントの実行

prepare キーワードを使用して、ストリングから SQL ステートメントを構成します。 この準備済みステートメントを、他のデータ・アクセス・ステートメントとともに実行することができます。

明示的 SQL コードの代わりに準備済みステートメントを使用すると、反復して実行するデータ・アクセス操作のパフォーマンスを向上させることができます。準備済みステートメントを作成すると、そのステートメントに必要となる多くの処理がデータベースによって事前に実行されます。 これにより、準備済みステートメントの実行時にデータベースが実行する処理が削減されます。 準備済みステートメントと明示的な SQL のどちらを使用するかは、データ・アクセス操作の使用頻度によって決まります。

基本的に、準備済みステートメントの実行と明示的な SQL コードの実行との間に違いはありません。 次の 2 つの関数は同等です。
function executeExplicitSQL()
    myCustomers myCustomers[0];
    get myCustomers with #sql{
        SELECT CUSTOMER_ID, LAST_NAME
        FROM MYSCHEMA.MYTABLE
    };
end

function executePreparedStatement()
    myCustomers myCustomers[0];
    prepare myStatement from 
        "SELECT CUSTOMER_ID, LAST_NAME FROM MYSCHEMA.MYTABLE";
    get myCustomers with myStatement;
end

前の例では、準備済みステートメントを実行するために get ステートメントを使用しましたが、executeopen を使用することもできます。 いずれの場合にも、準備済みステートメントはデータ・アクセス・ステートメントとして適切なものでなければなりません。 つまり、ストリングを明示的な SQL として実行できる場合には、そのストリングを準備済みステートメントとして準備し、実行することができます。 prepare は、SELECT などの標準 SQL ステートメント、変数を含む動的 SQL ステートメント、およびストアード・プロシージャー呼び出しのために使用できます。

注: EGL prepare ステートメントは Java™ PreparedStatement オブジェクトとは異なりますが、このステートメントとオブジェクトではパフォーマンスを改善できます。 Java PreparedStatement オブジェクトについて詳しくは 、prepareAllSQLStatementsを参照してください。

ステートメントの準備および実行

ステートメントを準備するには、最初に、そのステートメントを保持するストリング変数を作成してください。 他のストリングの場合と同じように、変数に値を直接割り当てることも、複数のストリングまたは変数から値をアセンブルすることもできます。
myString string = "SELECT ";
myString += "CUSTOMER_ID, LAST_NAME ";
myString += "FROM MYSCHEMA.MYTABLE";

次に、prepare を使用して、変数から準備済みステートメントを作成し、そのステートメントに新規 ID を割り当てます。

prepare myStatement from myString;
また、for 節を追加して、準備済みステートメントとともに使用する SQLRecord を指定することもできます。
myCustomer myCustomers;
prepare myStatement2 from myString for myCustomer;
最後に、このステートメントを実行し、その結果を変数に入れます。
myCustomerArray myCustomers[];
get myCustomerArray with myStatement2;

準備済みステートメント内での変数の使用

準備済みステートメントは特に、変数をステートメントに挿入したい場合に使用すると便利です。 準備済みステートメント内の変数は、通常の明示的 SQL コード内のホスト変数よりも高機能です。単に EGL 変数値を挿入できるだけでなく、動的ステートメントで使用する変数を変更できるからです。

準備済みステートメントを作成するときは、疑問符 (?) を使用して変数を表します。 この疑問符は、プレースホルダーとして機能します。このプレースホルダーには、後で次のように using 節を使用して値を挿入できます。
myCustomerID int = 5;
myCustomerArray myCustomers[];
myHostVarString string = "SELECT CUSTOMER_ID, LAST_NAME";
myHostVarString += " FROM MYSCHEMA.MYTABLE";
myHostVarString += " WHERE CUSTOMER_ID = ?";
prepare myStatement from myHostVarString;
get myCustomerArray with myHostVarString using myCustomerID;
この場合は、using myCustomerID 節を変更すれば、さまざまな状況で異なる変数を使用することができます。

詳細な準備済みステートメントの作成

EGL には、prepare ステートメントと、それに関連する executeget、または open ステートメントを作成するツールも用意されています。

  1. 論理パーツ内の関数において、ブランク行を右クリックしてから「SQL Prepare ステートメントを追加」をクリックする。「SQL Prepare ステートメントを追加」ウィンドウが開きます。
  2. 「準備済みステートメント ID」フィールドで、EGL prepare ステートメントを識別するための名前を入力する。規則については、「EGL 言語解説書」の『命名規則』を参照してください。
  3. 「SQL レコード変数名」フィールドで、リストからレコード変数を選択するか、新規変数の名前を入力し、「参照」ボタンを使用して SQL レコード・パーツを選択する。EGL ソース・コード内で、その名前を使用して SQL レコード変数を定義する必要があります。
  4. 「実行ステートメント型」フィールドで「execute」、「get」、または「open」を選択する。
  5. 「実行ステートメント型」フィールドで「open」を選択した場合は、「結果セット ID」フィールドにその結果セットの ID を入力する。
  6. OK」をクリックする。prepare ステートメントとそれに関連するデータ・アクセス・ステートメントが EGL によって作成されます。

フィードバック