|
ストアド プロシージャの本体内でのみ制御ステートメントを使用できます。これらのステートメントは、プロシージャの実行を制御します。制御ステートメントは以下のとおりです。
複合ステートメントは、ほかのステートメントをグループ化します。
BEGIN DECLARE :NumEnrolled INTEGER; DECLARE :MaxEnrollment INTEGER; DECLARE :failEnrollment CONDITION FOR SQLSTATE '09000'; SET :NumEnrolled = (SELECT COUNT (*) FROM Enrolls WHERE Class_ID = classId); SET :MaxEnrollment = (SELECT Max_Size FROM Class WHERE ID = classId); IF (:NumEnrolled >= :MaxEnrollment) THEN SIGNAL :failEnrollment ELSE SET :NumEnrolled = :NumEnrolled + 1; END IF; END
ストアド プロシージャまたはトリガーの本体内で複合ステートメントを使用できます。トリガーの詳細については、SQL トリガーを参照してください。
ほかの複合ステートメント内に複合ステートメントをネストできますが、最も外側の複合ステートメントだけに DECLARE ステートメントを取り込むことができます。
複合ステートメントの構文の詳細については、『SQL Engine Reference』で 「BEGIN [ATOMIC]」 を参照してください。
IF ステートメントは、条件の真の値に基づいて条件付き実行を行います。
IF ステートメントの構文の詳細については、『SQL Engine Reference』で 「IF」 を参照してください。
LEAVE ステートメントは、複合ステートメントまたは Loop ステートメントから離れることによって実行を続けます。
LEAVE ステートメントは、ラベル付き複合ステートメント内またはラベル付き Loop ステートメント内に現れるはずです。LEAVE ステートメントからのステートメント ラベルは、LEAVE を含むラベル付きステートメントのラベルと同じでなければなりません。このラベルは、対応ラベルと呼ばれています。
メモ
複合ステートメントには、Loop ステートメントを取り込むことができます。Loop ステートメントを埋め込むことができるので、LEAVE ステートメントのステートメント ラベルは埋め込みループのラベルまたはストアド プロシージャの本体のラベルに一致します。
LEAVE ステートメントの構文の詳細については、『SQL Engine Reference』で 「LEAVE」 を参照してください。
LOOP ステートメントは、ステートメント ブロックの実行を繰り返します。
FETCH_LOOP: LOOP FETCH NEXT cRooms INTO CurrentCapacity; IF (:counter = :NumRooms) THEN LEAVE FETCH_LOOP; END IF; SET :counter = :counter + 1; SET :TotalCapacity = :TotalCapacity + :CurrentCapacity; END LOOP;
SQL ステートメント リスト内の各ステートメントがエラーなく実行され、また、Pervasive PSQL に LEAVE ステートメントが発生しないか、ハンドラーを呼び出す場合は、LOOP ステートメントの実行が繰り返されます。LOOP ステートメントは、与えられた条件が真である間に実行が継続されるという点で、WHILE ステートメントに似ています。
LOOP ステートメントに開始ラベルがある場合、このステートメントはラベル付き LOOP ステートメントと呼ばれます。終了ラベルを指定する場合、そのラベルは開始ラベルと同じでなければなりません。
LOOP ステートメントの構文の詳細については、『SQL Engine Reference』で 「LOOP」 を参照してください。
WHILE ステートメントは、指定された条件が真である間にステートメント ブロックの実行を繰り返します。
FETCH_LOOP: WHILE (:counter < :NumRooms) DO FETCH NEXT cRooms INTO :CurrentCapacity; IF (SQLSTATE = '02000') THEN LEAVE FETCH_LOOP; END IF; SET :counter = :counter + 1; SET :TotalCapacity = :TotalCapacity + :CurrentCapacity; END WHILE;
Pervasive PSQL は、ブール値の式を評価します。その値が真であれば、Pervasive PSQL は SQL ステートメント リストを実行します。SQL ステートメント リスト内の各ステートメントがエラーなく実行され、また、LEAVE ステートメントが発生しない場合は、Loop ステートメントの実行が繰り返されます。ブール値の式が偽または不明である場合、Pervasive PSQL は Loop ステートメントの実行を終了します。
WHILE ステートメントに開始ラベルがある場合、このステートメントはラベル付き WHILE ステートメントと呼ばれます。終了ラベルを指定する場合、そのラベルは開始ラベルと同じでなければなりません。WHILE ステートメントの構文の詳細については、『SQL Engine Reference』で 「WHILE」 を参照してください。
|