ルーチン

ルーチン とは、実行可能な SQL オブジェクトのことです。

ルーチンには 2 つのタイプがあります。

関数

関数 とは、他の SQL ステートメント内から起動されて、 値または表を戻すルーチンのことです。 詳しくは、関数を参照してください。

関数は、SQL 関数か外部関数のいずれかに分類されます。 SQL 関数は SQL ステートメントを使用して作成され、総称して SQL プロシージャー型言語とも呼ばれます。 外部関数は、SQL ステートメントを含む場合も、含まない場合もあるホスト言語プログラムを参照します。

関数 は CREATE FUNCTION ステートメントを使用して作成されます。 関数の作成についての詳細は、CREATE FUNCTIONを参照してください。

プロシージャー

プロシージャー (ストアード・プロシージャー とも呼ばれます) は、 ホスト言語ステートメントと SQL ステートメントの両方を組み込んだ操作を実行するために呼び出すことができるルーチンです。

プロシージャーは、SQL プロシージャーと外部プロシージャーに類別されます。 SQL プロシージャーは SQL ステートメントを使用して作成され、総称して SQL プロシージャー型言語とも呼ばれます。 外部プロシージャーは、SQL ステートメントを含む場合も、含まない場合もあるホスト言語プログラムを参照します。

プロシージャー は CREATE PROCEDURE ステートメントを使用して作成されます。プロシージャーの作成についての詳細は、CREATE PROCEDUREを参照してください。

SQL のプロシージャーは、ホスト言語のプロシージャーと同様の利点をもたらします。すなわち、共通のコード部分を一度だけ作成し、メンテナンスすることによって、複数のプログラムから呼び出すことができます。ホスト言語、および SQL の両者は、そのローカル・システムに存在するプロシージャーを呼び出すことができます。ただし、SQL は、リモート・システムに存在するプロシージャーも呼び出すことができます。事実、SQL のプロシージャーの主要な利点は、プロシージャーを分散アプリケーションのパフォーマンス特性の向上に使用することができる点にあります。

リモート・システムで、複数の SQL ステートメントの実行が必要であると想定します。そのための方法は、2 とおりあります。プロシージャーがない場合、最初の SQL ステートメントが実行されると、アプリケーション・リクエスターは、該当の操作を行うよう求める要求をアプリケーション・サーバーに送ります。その上で、アプリケーション・リクエスターは、そのステートメントが正常に実行されたか否かを示す応答を待ち、必要に応じて結果を戻します。2 番目およびそれ以降の SQL ステートメントが実行される時点で、アプリケーション・リクエスターは、別の要求を送り、その応答を待ちます。

アプリケーション・サーバーのプロシージャー内に同じ SQL ステートメントが保管されていれば、そのリモート・プロシージャーを参照する CALL ステートメントを実行することができます。その CALL ステートメントが実行されると、アプリケーション・リクエスターは、そのプロシージャーを呼び出す単一の要求を現行サーバーに送ります。その上で、アプリケーション・リクエスターは、そのプロシージャーが正常に実行されたか否かを示す単一の応答を待ち、必要に応じて結果を戻します。

次の 2 つの図は、分散アプリケーションでストアード・プロシージャーを使用することによって、リモート要求の数をどのように減らすことができるかを示しています。 図 1 には、多くのリモート要求を作成するプログラムが示されています。

図 1. リモート・プロシージャーを持たないアプリケーション
リモート・プロシージャーを持たないアプリケーション
図 2. リモート・プロシージャーを持つアプリケーション
リモート・プロシージャーを持つアプリケーション