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

  1. /*
  2.  *  Program type:   Embedded Static SQL
  3.  *
  4.  *  Description:
  5.  *        This program selects a blob data type.
  6.  *        A set of project descriptions is printed.
  7.  */
  8.  
  9. #include "example.h"
  10. #include <stdlib.h>
  11. #include <stdio.h>
  12.  
  13. EXEC SQL
  14.     BEGIN DECLARE SECTION;
  15.  
  16. BASED ON project.proj_name            proj_name;
  17. BASED ON project.product            prod_type;
  18.  
  19. BASED ON project.proj_desc            blob_id;
  20. BASED ON project.proj_desc.SEGMENT        blob_segment;
  21. unsigned short                    blob_seg_len;
  22.  
  23. EXEC SQL
  24.     END DECLARE SECTION;
  25.  
  26.  
  27. int main PROTO((void))
  28. {
  29.     EXEC SQL
  30.         WHENEVER SQLERROR GO TO Error;
  31.  
  32.     /* Declare a table read cursor. */
  33.     EXEC SQL
  34.         DECLARE proj_cur CURSOR FOR
  35.         SELECT proj_name, proj_desc, product
  36.         FROM project
  37.         WHERE product IN ('software', 'hardware', 'other')
  38.         ORDER BY proj_name;
  39.  
  40.     /* Declare a blob read cursor. */
  41.     EXEC SQL
  42.         DECLARE blob_cur CURSOR FOR
  43.         READ BLOB proj_desc
  44.         FROM project;
  45.  
  46.     /* Open the table cursor. */
  47.     EXEC SQL
  48.         OPEN proj_cur;
  49.  
  50.     /*
  51.      *  For each project get and display project description.
  52.      */
  53.  
  54.     while (SQLCODE == 0)
  55.     {
  56.         /* Fetch the blob id along with some other columns. */
  57.         EXEC SQL
  58.             FETCH proj_cur INTO :proj_name, :blob_id, :prod_type;
  59.  
  60.         if (SQLCODE == 100)
  61.             break;
  62.  
  63.         printf("\nPROJECT:  %-30s   TYPE:  %-15s\n\n", proj_name, prod_type);
  64.  
  65.         /* Open the blob cursor. */
  66.         EXEC SQL
  67.             OPEN blob_cur USING :blob_id;
  68.  
  69.         while (SQLCODE == 0)
  70.         {
  71.             /* Fetch a blob segment and a blob segment length. */
  72.             EXEC SQL FETCH blob_cur INTO :blob_segment :blob_seg_len;
  73.  
  74.             if (SQLCODE == 100)
  75.                 break;
  76.  
  77.             printf("  %*.*s\n", blob_seg_len, blob_seg_len, blob_segment);
  78.         }
  79.         printf("\n");
  80.  
  81.         /* Close the blob cursor. */
  82.         EXEC SQL
  83.             CLOSE blob_cur;
  84.     }
  85.  
  86.     EXEC SQL
  87.         CLOSE proj_cur;
  88.  
  89.     EXEC SQL
  90.         COMMIT;
  91.  
  92. return 0;
  93.  
  94. Error:
  95.     isc_print_sqlerror((short) SQLCODE, gds__status);
  96. return 1;
  97. }
  98.  
  99.