例: 埋め込みSQLからの動的結果セットを返すストアド プロシージャの呼び出し - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ操作言語

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Published
2021年7月
Language
日本語
Last Update
2021-09-23
dita:mapPath
ja-JP/vjt1596846980081.ditamap
dita:ditavalPath
ja-JP/wrg1590696035526.ditaval
dita:id
B035-1146
Product Category
Software
Teradata Vantage

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);