静的両方向スクロール・カーソルの結果表の行数の判別

INSENSITIVE または SENSITIVE STATIC 両方向スクロール・カーソルの結果表に含まれる行数を調べることができます。

プロシージャー

静的両方向スクロール・カーソルの結果表の行数を判別するには、以下の手順を実行します。

  1. FETCH AFTER など、最後の行の後にカーソルが置かれるような FETCH ステートメントを実行します。
  2. 次のいずれかのアクションを実行します。
    • SQLCAのフィールドSQLERRD(1)とSQLERRD(2)の値を取得します(CとC ++の場合はフィールドsqlerrd [0]およびsqlerrd [1])。 SQLERRD(1)とSQLERRD(2)は一緒になって、結果表の行数を含むダブルワード値を形成します。
    • GET DIAGNOSTICS ステートメントを発行して、DB2_NUMBER_ROWS 項目の値を取得します。

次の C 言語コードは、センシティブ静的カーソルの結果表の行数を取得する方法を示しています。

EXEC SQL INCLUDE SQLCA;
long int rowcount; 
EXEC SQL                                            
 DECLARE SENSTAT SENSITIVE STATIC SCROLL CURSOR FOR  
 SELECT * FROM EMP;
EXEC SQL OPEN SENSTAT;
if (SQLCODE==0) {
 EXEC SQL FETCH AFTER SENSTAT; /* Position the cursor after the end */
                               /* of the result table               */ 
 if (SQLCODE==0) {
  /************************************/ 
  /* Get the row count from the SQLCA */
  /************************************/
  printf("%s \n","Row count from SQLCA: ");
  printf("%s %d\n","SQLERRD1: High-order word: ",sqlca.sqlerrd[0]);
                              /* Get the high-order word of the     */
                              /* result table size                  */
  printf("%s %d\n","SQLERRD2: Low-order word: ",sqlca.sqlerrd[1]);
                              /* Get the low-order word of the      */
                              /* result table size                  */
  /******************************************/ 
  /* Get the row count from GET DIAGNOSTICS */
  /******************************************/
  EXEC SQL GET DIAGNOSTICS :rowcount = DB2_NUMBER_ROWS;
  if (SQLCODE==0) {
   printf("%s %d\n","Row count from GET DIAGNOSTICS: ",rowcount);
  }
 }
}