4つまでの動的結果セットを呼び出し側の埋め込みSQLアプリケーションに返す次のストアド プロシージャについて考えてみましょう。
CREATE PROCEDURE TESTSP1(INOUT p1 INTEGER, OUT p2 INTEGER) DYNAMIC RESULT SETS 4 BEGIN DECLARE tab1_cursor CURSOR WITH RETURN ONLY TO CALLER FOR SELECT c1, c2, c3 FROM tab1; OPEN tab1_cursor; SET p1 = p1 + 1; SET p2 = 82; END;
このプロシージャによってアプリケーションに返される動的結果セットの行にアクセスするには、次のようにカーソルを宣言します。
EXEC SQL BEGIN DECLARE SECTION; … long H1; long H2; long M1; long M2; long M3; … EXEC SQL END DECLARE SECTION; … EXEC SQL DECLARE TESTCUR CURSOR FOR 'CALL TESTSP1(:H1, :H2)'; EXEC SQL OPEN TESTCUR;
プロシージャが1つ以上の行を返す場合、SQLCODEは3212に設定され、SQLSTATEは'T3212'に設定されます。この例では、SQLSTATE戻りコードは使用されません。完全にするため、この例のSQLCODE値と同等のSQLSTATEコードが使用されます。
ストアド プロシージャが行を返さない場合、SQLCODEは0に設定され、SQLSTATEは'T0000'に設定されます。
if (SQLCODE == 3212) fetch_rows(); else if (SQLCODE != 0) error_check();
ストアド プロシージャに宣言したカーソルからの行の取出しは、SQLリクエストに定義したカーソルから行を取り出すことに似ています。
void fetch_rows() do { EXEC SQL FETCH TESTCUR INTO :M1, :M2, :M3; … } while (SQLCODE == 0);