外部ストアード・プロシージャーの定義と同じように、 SQL プロシージャー定義には、以下のような情報が記載されています。
外部ストアード・プロシージャーの CREATE PROCEDURE ステートメントとは異なり、 SQL プロシージャーの CREATE PROCEDURE ステートメントでは EXTERNAL 文節が指定されません。その代わり、 SQL プロシージャーにはそのストアード・プロシージャーのソース・ステートメントを含むプロシージャー本体があります。
次の例では、簡単なストアード・プロシージャーの CREATE PROCEDURE ステートメントが示されています。プロシージャー名、プロシージャーから (またはプロシージャーへ) 受け渡されるパラメーターのリスト、および LANGUAGE パラメーターはストアード・プロシージャーすべてに共通するものです。ただし、SQL の LANGUAGE 値およびプロシージャー本体を形成する BEGIN...END ブロックは、 SQL プロシージャー特有のものです。
CREATE PROCEDURE UPDATE_SALARY_1 (1) (IN EMPLOYEE_NUMBER CHAR(6), (2) IN RATE INTEGER) (2) LANGUAGE SQL (3) BEGIN UPDATE EMPLOYEE (4) SET SALARY = SALARY * (1.0 * RATE / 100.0 ) WHERE EMPNO = EMPLOYEE_NUMBER; END
前述の例の注記:
(1) | ストアード・プロシージャーの名前は UPDATE_SALARY_1 です。 |
(2) | 2 つのパラメーターのデータ・タイプは CHAR(6) および INTEGER です。どちらも入力パラメーターです。 |
(3) | LANGUAGE SQL は、これが SQL プロシージャーであることを示しています。プロシージャー本体は他のパラメーターに後続します。 |
(4) | プロシージャー本体は単一の SQL UPDATE ステートメントで構成され、従業員表の行を更新します。 |
SQL プロシージャー本体では、 OUT パラメーターを式の値として使用することはできません。 OUT パラメーターへ値を割り当てるには、割り当てステートメントを使用するか、 SELECT、VALUES および FETCH ステートメントの INTO 文節のターゲット変数とするしか方法はありません。 IN パラメーターは、割り当てまたは INTO 文節のターゲットとして使用することはできません。