プロシージャーは、戻り値のないサブルーチンです。これは呼び出し元から入力パラメーターを受け取り、出力パラメーターを戻します。
プロシージャーは関数に非常に似ています。両者の主な違いは、プロシージャーは戻り値がなく、関数には戻り値があることです。したがって、プロシージャーは式の一部を形成することはできず、CALL ステートメントを使用して起動されます。一般的にプロシージャーには出力パラメーターがあります。
ESQL にプロシージャーをインプリメントするか (内部プロシージャー)、データベース・ストアード・プロシージャーとしてインプリメントできます (外部プロシージャー)。ESQL プロシージャーは、単一の ESQL ステートメントである必要があります。ただし、そのステートメントは BEGIN END などの複合ステートメントであることも可能です。プロシージャーは、EVAL ステートメントまたは EVAL 関数で定義することはできません。
プロシージャーを定義するときは、名前を指定してください。名前には、大/小文字の区別がありません (つまり、大/小文字の任意の組み合わせで名前を使用しても、宣言と一致します)。これは、スキーマ、定数、変数、およびラベルに対して宣言する名前とは対照的です。それらの場合には、大/小文字の区別を付けて扱われ、宣言したのと同じに正確に指定する必要があります。
ESQL 式には他の (同じまたは異なる従属プロジェクト内の ESQL ファイルで定義された) ブローカー・スキーマ内のプロシージャーに対する参照が含まれることもあります。この手法を使用したい場合、プロシージャーを完全修飾するか、または修飾子を設定する PATH ステートメントを組み込んでください。PATH ステートメントは同じ ESQL ファイル内でコーディングする必要がありますが、MODULE 内でコーディングすることはできません。
外部データベース・プロシージャーは、キーワード EXTERNAL および外部プロシージャー名によって示されます。このプロシージャーは、データベース内とブローカー内とで定義する必要があり、それぞれのパラメーター名は同じである必要はありませんが、EXTERNAL キーワードを使用して指定した名前とデータベース・ストアード・プロシージャーの名前は同じでなければなりません。ESQL プロシージャー名は、そのプロシージャーの中で定義する外部名とは別の名前でもかまいません。
多重定義プロシージャーは、どのデータベースでもサポートされていません。(多重定義プロシージャーとは、同じデータベース・スキーマ内の別のプロシージャーと同じ名前を持つプロシージャーで、パラメーターの数またはパラメーターのタイプが異なるものです。)プロシージャーが多重定義であることをブローカーが検出すると、例外が生じます。
ストアード・プロシージャーのスキーマ名の動的解決機能がサポートされています。プロシージャーを定義する場合には、ESQL がプロシージャーを呼び出す前に解決するスキーマのワイルドカードを指定する必要があります。これについては、ストアード・プロシージャーの呼び出しで詳しく説明されています。