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

  1. /*
  2.  *  Program type:   Embedded Static SQL
  3.  *    
  4.  *  Description:
  5.  *        This program selects an array data type.
  6.  *        Projected head count is displayed for the 4
  7.  *        quarters of some fiscal year for some project,
  8.  *        ordered by department name.
  9.  */
  10.  
  11. #include "example.h"
  12. #include <stdlib.h>
  13. #include <stdio.h>
  14.  
  15. EXEC SQL
  16.     BEGIN DECLARE SECTION;
  17. EXEC SQL
  18.     END DECLARE SECTION;
  19.  
  20.  
  21. int main PROTO ((void))
  22. {
  23.     BASED_ON department.department                department;
  24.     BASED_ON proj_dept_budget.quart_head_cnt    hcnt;
  25.     BASED_ON proj_dept_budget.quart_head_cnt    tot;
  26.  
  27.     int        fiscal_year = 1994;                /* year parameter */
  28.     char    *project = "VBASE";                /* project parameter */
  29.     short    i;
  30.  
  31.     EXEC SQL
  32.         WHENEVER SQLERROR GO TO Error;
  33.  
  34.     /*
  35.      *    Declare a cursor for selecting an array, given 2
  36.      *    2 parameters (year and project).
  37.      */
  38.     EXEC SQL
  39.         DECLARE proj_cnt CURSOR FOR
  40.         SELECT department, quart_head_cnt[]
  41.         FROM proj_dept_budget p, department d
  42.         WHERE p.dept_no = d.dept_no
  43.         AND year = :fiscal_year
  44.         AND proj_id = :project
  45.         ORDER BY department;
  46.  
  47.     printf("\n\t\t\tPROJECTED HEAD-COUNT REPORT\n");
  48.     printf("\t\t\t      (by department)\n\n");
  49.     printf("FISCAL YEAR:  %d\n", fiscal_year);
  50.     printf("PROJECT ID :  %s\n\n\n", project);
  51.  
  52.     printf("%-25s%10s%10s%10s%10s\n\n",
  53.             "DEPARTMENT", "QTR1", "QTR2", "QTR3", "QTR4");
  54.  
  55.     /* Initialize quarterly totals. */
  56.     for (i = 0; i < 4; i++)    
  57.         tot[i] = 0;
  58.     
  59.     EXEC SQL
  60.         OPEN proj_cnt;
  61.  
  62.     /* Get and display each department's counts. */
  63.     while (SQLCODE == 0)
  64.     {
  65.         EXEC SQL
  66.             FETCH proj_cnt INTO :department, :hcnt;
  67.  
  68.         if (SQLCODE == 100)
  69.             break;
  70.  
  71.         printf("%-25s%10ld%10ld%10ld%10ld\n",
  72.                     department, hcnt[0], hcnt[1], hcnt[2], hcnt[3]);
  73.         
  74.         for (i = 0; i < 4; i++)
  75.             tot[i] += hcnt[i];
  76.     }
  77.  
  78.     /* Display quarterly totals. */
  79.     printf("\n%-25s%10ld%10ld%10ld%10ld\n\n",
  80.                     "TOTAL", tot[0], tot[1], tot[2], tot[3]);
  81.  
  82.     EXEC SQL
  83.         CLOSE proj_cnt;
  84.  
  85.     EXEC SQL
  86.         COMMIT WORK;
  87.  
  88. return 0;
  89.         
  90. Error:
  91.     isc_print_sqlerror((short) SQLCODE, gds__status);
  92. return 1;
  93. }
  94.  
  95.