prepare キーワードを使用して、ストリングから SQL ステートメントを構成します。 この準備済みステートメントを、他のデータ・アクセス・ステートメントとともに実行することができます。
明示的 SQL コードの代わりに準備済みステートメントを使用すると、反復して実行するデータ・アクセス操作のパフォーマンスを向上させることができます。準備済みステートメントを作成すると、そのステートメントに必要となる多くの処理がデータベースによって事前に実行されます。 これにより、準備済みステートメントの実行時にデータベースが実行する処理が削減されます。 準備済みステートメントと明示的な SQL のどちらを使用するかは、データ・アクセス操作の使用頻度によって決まります。
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 ステートメントを使用しましたが、execute や open を使用することもできます。 いずれの場合にも、準備済みステートメントはデータ・アクセス・ステートメントとして適切なものでなければなりません。 つまり、ストリングを明示的な SQL として実行できる場合には、そのストリングを準備済みステートメントとして準備し、実行することができます。 prepare は、SELECT などの標準 SQL ステートメント、変数を含む動的 SQL ステートメント、およびストアード・プロシージャー呼び出しのために使用できます。
myString string = "SELECT ";
myString += "CUSTOMER_ID, LAST_NAME ";
myString += "FROM MYSCHEMA.MYTABLE";
次に、prepare を使用して、変数から準備済みステートメントを作成し、そのステートメントに新規 ID を割り当てます。
prepare myStatement from myString;
myCustomer myCustomers;
prepare myStatement2 from myString for myCustomer;
myCustomerArray myCustomers[];
get myCustomerArray with myStatement2;
準備済みステートメントは特に、変数をステートメントに挿入したい場合に使用すると便利です。 準備済みステートメント内の変数は、通常の明示的 SQL コード内のホスト変数よりも高機能です。単に EGL 変数値を挿入できるだけでなく、動的ステートメントで使用する変数を変更できるからです。
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 ステートメントと、それに関連する execute、get、または open ステートメントを作成するツールも用意されています。