home *** CD-ROM | disk | FTP | other *** search
/ PC World 1999 May / PCWorld_1999-05_cd.bin / software / Vyzkuste / inprise / INTRBASE_55 / EXAMPLES / API / STAT3.E < prev    next >
Text File  |  1998-10-18  |  2KB  |  89 lines

  1. /*
  2.  *  Program type:   Embedded Static SQL
  3.  *
  4.  *  Description:
  5.  *        This program declares a cursor, opens the cursor, and loops
  6.  *        fetching multiple rows.  All departments that need to hire
  7.  *        a manager are selected and displayed.
  8.  */
  9.  
  10. #include "example.h"
  11. #include <stdlib.h>
  12. #include <stdio.h>
  13.  
  14. EXEC SQL
  15.     BEGIN DECLARE SECTION;
  16. EXEC SQL
  17.     END DECLARE SECTION;
  18.  
  19.  
  20. int main PROTO ((void))
  21. {
  22.     BASED_ON department.department    department;
  23.     BASED_ON department.department    parent_dept;
  24.     BASED_ON department.location    location;
  25.  
  26.     /* Trap all errors. */
  27.     EXEC SQL
  28.         WHENEVER SQLERROR GO TO Error;
  29.  
  30.     /* Trap SQLCODE = -100 (end of file reached during a fetch). */
  31.     EXEC SQL
  32.         WHENEVER NOT FOUND GO TO AllDone;
  33.  
  34.     /* Ignore all warnings. */
  35.     EXEC SQL
  36.         WHENEVER SQLWARNING CONTINUE;
  37.  
  38.     /* Declare the cursor for selecting all departments without a manager. */
  39.     EXEC SQL
  40.         DECLARE to_be_hired CURSOR FOR
  41.         SELECT d.department, d.location, p.department
  42.         FROM department d, department p
  43.         WHERE d.mngr_no IS NULL
  44.         AND d.head_dept = p.dept_no;
  45.  
  46.     /* Open the cursor. */
  47.     EXEC SQL
  48.         OPEN to_be_hired;
  49.  
  50.     printf("\n%-25s %-15s %-25s\n\n",
  51.                 "DEPARTMENT", "LOCATION", "HEAD DEPARTMENT");
  52.  
  53.     /*
  54.      *    Select and display all rows.
  55.      */
  56.     while (SQLCODE == 0)
  57.     {
  58.         EXEC SQL
  59.             FETCH to_be_hired INTO :department, :location, :parent_dept;
  60.  
  61.         /* 
  62.          *  If FETCH returns with -100, the processing will jump
  63.          *  to AllDone before the following printf is executed.
  64.          */
  65.         
  66.         printf("%-25s %-15s %-25s\n", department, location, parent_dept);
  67.     }
  68.  
  69.     /*
  70.      *    Close the cursor and release all resources.
  71.      */
  72. AllDone:
  73.     EXEC SQL
  74.         CLOSE to_be_hired;
  75.  
  76.     EXEC SQL
  77.         COMMIT RELEASE;
  78.  
  79. return 0;
  80.  
  81.     /*
  82.      *    Print the error, and exit.
  83.      */
  84. Error:
  85.     isc_print_sqlerror((short)SQLCODE, gds__status);
  86. return 1;
  87. }
  88.  
  89.