home *** CD-ROM | disk | FTP | other *** search
/ Piper's Pit BBS/FTP: ibm 0210 - 0219 / ibm0210-0219 / ibm0213.tar / ibm0213 / 7025PWA1.ZIP / SAMPLES.ZIP / SQLLIB / SAMPLES / C / CURSOR.SQC < prev    next >
Encoding:
Text File  |  1994-02-28  |  1.3 KB  |  55 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <sqlenv.h>
  5. #include <sqlca.h>
  6.  
  7. int main(void)
  8. {
  9.    EXEC SQL BEGIN DECLARE SECTION;
  10.       char pname[10] = " ";
  11.       short dept = 0;
  12.    EXEC SQL END DECLARE SECTION;
  13.  
  14.    struct sqlca sqlca;
  15.    printf( "\nSample C program: CURSOR " );
  16.  
  17.    EXEC SQL CONNECT TO sample IN SHARE MODE;
  18.    if ( SQLCODE != 0 ) {
  19.       printf( "\nCONNECT TO Error:  SQLCODE = %ld", SQLCODE );
  20.       exit(1);
  21.    }
  22.  
  23.    EXEC SQL WHENEVER SQLERROR  GO TO ext;
  24.    EXEC SQL WHENEVER NOT FOUND GO TO cls;  /* :rk.1:erk. */
  25.  
  26.    EXEC SQL DECLARE c1 CURSOR FOR  /* :rk.2:erk. */
  27.      SELECT name, dept FROM staff
  28.      WHERE JOB='Mgr'
  29.      FOR UPDATE OF job;
  30.  
  31.    EXEC SQL OPEN c1;  /* :rk.3:erk. */
  32.  
  33.    do {
  34.       EXEC SQL FETCH c1 INTO :pname, :dept;  /* :rk.4:erk. */
  35.  
  36.       printf( "\n%s in dept. %d will be demoted to Clerk",
  37.               pname, dept );
  38.  
  39.       EXEC SQL UPDATE staff SET job = 'Clerk'  /* :rk.5:erk. */
  40.         WHERE CURRENT OF c1;
  41.    } while ( 1 );
  42.  
  43. cls:
  44.    EXEC SQL CLOSE c1;  /* :rk.6:erk. */
  45. ext:
  46.    if ( SQLCODE != 0 )
  47.       printf( "Error:  SQLCODE = %ld.\n", SQLCODE );
  48.  
  49.    EXEC SQL WHENEVER SQLERROR CONTINUE;
  50.    EXEC SQL ROLLBACK;
  51.    printf( "\n\nOn second thought...changes rolled back" );
  52.  
  53.    EXEC SQL CONNECT RESET;
  54. }
  55.