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 / stat9.e < prev   
Text File  |  2000-06-23  |  4KB  |  177 lines

  1. /*
  2.  *  Program type:   Embedded Static SQL
  3.  *
  4.  *  Description:
  5.  *        This program executes a stored procedure and selects from
  6.  *        a stored procedure.  First, a list of projects an employee
  7.  *        is involved in is printed.  Then the employee is added to
  8.  *        another project.  The new list of projects is printed again.
  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 <string.h>
  33. #include <stdio.h>
  34.  
  35. EXEC SQL INCLUDE SQLCA;
  36.  
  37. void select_projects (short emp_no);
  38. void get_params (short *emp_no, char* proj_id);
  39. void pr_error (long status);
  40. int add_emp_proj (short emp_no,char * proj_id);
  41.  
  42.  
  43.  
  44. int main (void)
  45. {
  46.     BASED_ON employee.emp_no    emp_no;
  47.     BASED_ON project.proj_id    proj_id;
  48.  
  49.     /*
  50.      *    Add employee with id 8 to project 'MAPDB'.
  51.      */
  52.     get_params(&emp_no, proj_id);
  53.  
  54.     /*
  55.      *    Display employee's current projects.
  56.      */
  57.     printf("\nCurrent projects for employee id: %d\n\n", emp_no);
  58.     select_projects(emp_no);
  59.  
  60.     /*
  61.      *    Insert a new employee project row.
  62.      */
  63.     printf("\nAdd employee id: %d to project: %s\n", emp_no, proj_id);
  64.     add_emp_proj(emp_no, proj_id);
  65.  
  66.     /*
  67.      *    Display employee's new current projects.
  68.      */
  69.     printf("\nCurrent projects for employee id: %d\n\n", emp_no);
  70.     select_projects(emp_no);
  71.  
  72. }
  73.  
  74.  
  75. /*
  76.  *    Select from a stored procedure.
  77.  *    Procedure 'get_emp_proj' gets employee's projects.
  78.  */
  79. void select_projects(ARG(short, emp_no))
  80.     ARGLIST(short emp_no)
  81. {
  82.     BASED_ON project.proj_id    proj_id;
  83.  
  84.     EXEC SQL
  85.         WHENEVER SQLERROR GO TO SelError;
  86.  
  87.     /* Declare a cursor on the stored procedure. */
  88.     EXEC SQL
  89.         DECLARE projects CURSOR FOR
  90.         SELECT proj_id FROM get_emp_proj (:emp_no)
  91.         ORDER BY proj_id;
  92.  
  93.     EXEC SQL
  94.         OPEN projects;
  95.     
  96.     /* Print employee projects. */
  97.     while (SQLCODE == 0)
  98.     {
  99.         EXEC SQL
  100.             FETCH projects INTO :proj_id;
  101.  
  102.         if (SQLCODE == 100)
  103.             break;
  104.  
  105.         printf("\t%s\n", proj_id);
  106.     }
  107.  
  108.     EXEC SQL
  109.         CLOSE projects;
  110.     
  111.     EXEC SQL
  112.         COMMIT RETAIN;
  113.  
  114. SelError:
  115.     if (SQLCODE)
  116.         pr_error((long)gds__status);
  117. }
  118.  
  119.  
  120. /*
  121.  *    Execute a stored procedure.
  122.  *    Procedure 'add_emp_proj' adds an employee to a project.
  123.  */
  124. add_emp_proj(ARG(short, emp_no),
  125.              ARG(char *, proj_id))
  126.     ARGLIST(BASED_ON employee.emp_no    emp_no)
  127.     ARGLIST(BASED_ON project.proj_id    proj_id)
  128. {
  129.     EXEC SQL
  130.         WHENEVER SQLERROR GO TO AddError;
  131.  
  132.     EXEC SQL
  133.         EXECUTE PROCEDURE add_emp_proj :emp_no, :proj_id;
  134.  
  135.     EXEC SQL
  136.         COMMIT;
  137.  
  138. AddError:
  139.     if (SQLCODE) 
  140.         pr_error((long)gds__status);
  141. }
  142.  
  143.  
  144. /*
  145.  *    Set-up procedure parameters and clean-up old data.
  146.  */
  147. void get_params(ARG(short *, emp_no),
  148.                 ARG(char *, proj_id))
  149. ARGLIST(BASED_ON employee.emp_no        *emp_no)
  150. ARGLIST(BASED_ON project.proj_id        proj_id)
  151. {
  152.     *emp_no = 8;
  153.     strcpy(proj_id, "MAPDB");
  154.  
  155.     EXEC SQL
  156.         WHENEVER SQLERROR GO TO CleanupError;
  157.  
  158.     /* Cleanup:  delete row from the previous run. */
  159.     EXEC SQL
  160.         DELETE FROM employee_project
  161.         WHERE emp_no = 8 AND proj_id = "MAPDB";
  162.  
  163. CleanupError:
  164.     return;
  165. }
  166.  
  167.  
  168. /*
  169.  *    Print an error message.
  170.  */
  171. void pr_error(ARG(long, status))
  172.     ARGLIST(long    status)
  173. {
  174.     isc_print_sqlerror(SQLCODE, gds__status);
  175. }
  176.  
  177.