ex18.c

Example for selecting from a refcursor.

00001 /* $Id: ex18.c 221 2002-08-24 12:54:47Z kpoitschke $ */
00002 #include <stdio.h>
00003 #include <stdlib.h>
00004 #include "examples.h"
00005 
00006 int select_refcursor2(sqlo_db_handle_t dbh, double min_salary)
00007 {
00008   sqlo_stmt_handle_t sth = SQLO_STH_INIT;
00009   sqlo_stmt_handle_t st2h;                     /* handle of the ref cursor */
00010   double sal = min_salary;
00011   int status;
00012   char name[30];
00013   double salary;
00014   short nind, sind;
00015 
00016   CONST char * stmt = 
00017     "BEGIN\n"
00018     "    OPEN :c1 FOR SELECT ENAME, SAL FROM EMP WHERE SAL >= :min_sal ORDER BY 2,1;\n"
00019     "END;\n";
00020 
00021 
00022   /* parse the statement */
00023   if ( 0 <= (sth = sqlo_prepare(dbh, stmt))) {
00024 
00025     /* bind all variables */
00026     if (SQLO_SUCCESS != 
00027         (sqlo_bind_by_name(sth, ":c1", SQLOT_RSET, &st2h, 0, 0, 0)) ||
00028         (sqlo_bind_by_name(sth, ":min_sal", SQLOT_FLT, &sal, sizeof(sal), 0, 0) ) ) {
00029       error_exit(dbh, "sqlo_bind_by_name");
00030     } else {
00031 
00032       /* execute the PL/SQL block */
00033       if (SQLO_SUCCESS != sqlo_execute(sth, 1))
00034         error_exit(dbh, "sqlo_execute");
00035     }
00036 
00037     /* execute the second cursor */
00038     if(SQLO_SUCCESS != sqlo_execute(st2h, 1))
00039       error_exit(dbh, "sqlo_execute");
00040 
00041     if (SQLO_SUCCESS != 
00042         ( sqlo_define_by_pos(st2h, 1, SQLOT_STR, name, sizeof(name), &nind, 0, 0) ) ||
00043         ( sqlo_define_by_pos(st2h, 2, SQLOT_FLT, &salary, sizeof(salary), &sind, 0, 0) ) )
00044       {
00045         error_exit(dbh, "sqlo_define_by_pos");
00046       }
00047 
00048     while (SQLO_SUCCESS == (status = sqlo_fetch(st2h, 1))) {
00049       printf("Name=%-8s Salary= %6.2f\n", name, salary);
00050     }
00051     
00052     if (status != SQLO_NO_DATA)
00053       error_exit(dbh, "sqlo_fetch(st2)");
00054 
00055     if (SQLO_SUCCESS != sqlo_close(sth))
00056       error_exit(dbh, "sqlo_close(1)");
00057 
00058     if (SQLO_SUCCESS != sqlo_close(st2h))
00059       error_exit(dbh, "sqlo_close(2)");
00060 
00061   } else {
00062     error_exit(dbh, "sqlo_prepare");
00063   }
00064 
00065   return 1;
00066 }
00067 
00068 /* $Id: ex18.c 221 2002-08-24 12:54:47Z kpoitschke $ */

Generated on Mon May 21 13:43:28 2007 for libsqlora8 by  doxygen 1.4.7