home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 January / Chip_2001-01_cd1.bin / tema / interb / InterBase_WI-V6.0-server.exe / server / examples / gpre / stat6.e < prev    next >
Text File  |  2000-06-23  |  3KB  |  114 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.  * The contents of this file are subject to the Interbase Public
  10.  * License Version 1.0 (the "License"); you may not use this file
  11.  * except in compliance with the License. You may obtain a copy
  12.  * of the License at http://www.Interbase.com/IPL/
  13.  *
  14.  * Software distributed under the License is distributed on an
  15.  * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express
  16.  * or implied. See the License for the specific language governing
  17.  * rights and limitations under the License.
  18.  *
  19.  * The Original Code was created by Interbase Software Corporation
  20.  * and its successors. Portions created by Borland/Inprise are
  21.  * Copyright (C) 1992-1998 and 1999-2000 Borland/Inprise. Portions
  22.  * created by InterBase Software Corporation are Copyright (C)
  23.  * 1998-1999 InterBase Software Corporation.
  24.  *
  25.  * Copyright (C) 2000 InterBase Software Corporation
  26.  * All Rights Reserved.
  27.  * Contributor(s): ______________________________________.
  28.  */
  29.  
  30. #include "example.h"
  31. #include <stdlib.h>
  32. #include <stdio.h>
  33.  
  34. EXEC SQL
  35.     BEGIN DECLARE SECTION;
  36. EXEC SQL
  37.     END DECLARE SECTION;
  38.  
  39.  
  40. int main (void)
  41. {
  42.     BASED_ON department.department                department;
  43.     BASED_ON proj_dept_budget.quart_head_cnt    hcnt;
  44.     BASED_ON proj_dept_budget.quart_head_cnt    tot;
  45.  
  46.     int        fiscal_year = 1994;                /* year parameter */
  47.     char    *project = "VBASE";                /* project parameter */
  48.     short    i;
  49.  
  50.     EXEC SQL
  51.         WHENEVER SQLERROR GO TO Error;
  52.  
  53.     /*
  54.      *    Declare a cursor for selecting an array, given 2
  55.      *    2 parameters (year and project).
  56.      */
  57.     EXEC SQL
  58.         DECLARE proj_cnt CURSOR FOR
  59.         SELECT department, quart_head_cnt[]
  60.         FROM proj_dept_budget p, department d
  61.         WHERE p.dept_no = d.dept_no
  62.         AND year = :fiscal_year
  63.         AND proj_id = :project
  64.         ORDER BY department;
  65.  
  66.     printf("\n\t\t\tPROJECTED HEAD-COUNT REPORT\n");
  67.     printf("\t\t\t      (by department)\n\n");
  68.     printf("FISCAL YEAR:  %d\n", fiscal_year);
  69.     printf("PROJECT ID :  %s\n\n\n", project);
  70.  
  71.     printf("%-25s%10s%10s%10s%10s\n\n",
  72.             "DEPARTMENT", "QTR1", "QTR2", "QTR3", "QTR4");
  73.  
  74.     /* Initialize quarterly totals. */
  75.     for (i = 0; i < 4; i++)    
  76.         tot[i] = 0;
  77.     
  78.     EXEC SQL
  79.         OPEN proj_cnt;
  80.  
  81.     /* Get and display each department's counts. */
  82.     while (SQLCODE == 0)
  83.     {
  84.         EXEC SQL
  85.             FETCH proj_cnt INTO :department, :hcnt;
  86.  
  87.         if (SQLCODE == 100)
  88.             break;
  89.  
  90.         printf("%-25s%10ld%10ld%10ld%10ld\n",
  91.                     department, hcnt[0], hcnt[1], hcnt[2], hcnt[3]);
  92.         
  93.         for (i = 0; i < 4; i++)
  94.             tot[i] += hcnt[i];
  95.     }
  96.  
  97.     /* Display quarterly totals. */
  98.     printf("\n%-25s%10ld%10ld%10ld%10ld\n\n",
  99.                     "TOTAL", tot[0], tot[1], tot[2], tot[3]);
  100.  
  101.     EXEC SQL
  102.         CLOSE proj_cnt;
  103.  
  104.     EXEC SQL
  105.         COMMIT WORK;
  106.  
  107. return 0;
  108.         
  109. Error:
  110.     isc_print_sqlerror((short) SQLCODE, gds__status);
  111. return 1;
  112. }
  113.  
  114.