SQL/MX Programming Manual for C and COBOL (G06.24+, H06.03+)
Dynamic SQL With Descriptor Areas
HP NonStop SQL/MX Programming Manual for C and COBOL—523627-004
10-10
Consideration—Retrieving Multiple Values From a
Large Buffer
 EXEC SQL DESCRIBE OUTPUT :hv_sqlstmt 
 USING SQL DESCRIPTOR 'out_sqlda';
 EXEC SQL DECLARE :hv_curspec CURSOR FOR :hv_sqlstmt;
 EXEC SQL OPEN :hv_curspec 
 USING SQL DESCRIPTOR 'in_sqlda'; 
 EXEC SQL GET DESCRIPTOR 'out_sqlda' :hv_num = COUNT; 
 printf ("Number of columns = %d\n", hv_num); 
// Get the type and length of 1st column
 hv_i =1;
 EXEC SQL GET DESCRIPTOR 'out_sqlda' VALUE:hv_i 
 :hv_empnum_length = LENGTH,
 :hv_type = TYPE;
 char *hv_emp_num;
 hv_emp_num = new char [hv_empnum_length];
 hv_empnum_ptr = (long)hv_emp_num; 
 EXEC SQL SET DESCRIPTOR 'out_sqlda' VALUE :hv_i
 VARIABLE_POINTER =:hv_empnum_ptr; 
 // Get the type and length of the second column
 hv_i = 2; 
 EXEC SQL GET DESCRIPTOR 'out_sqlda' VALUE :hv_i
 :hv_empname_length = LENGTH,
 :hv_type = TYPE; 
 char *hv_emp_name;
 hv_emp_name = new char [hv_empname_length];
 hv_empname_ptr = (long)hv_emp_name; 
/* Just setting the pointers to retrive column info */
 EXEC SQL SET DESCRIPTOR 'out_sqlda' VALUE :hv_i
 VARIABLE_POINTER =:hv_empname_ptr;
 EXEC SQL FETCH :hv_curspec 
 INTO SQL DESCRIPTOR 'out_sqlda';
 while ((strcmp(SQLSTATE,SQLSTATE_NODATA) != 0) 
 && 
 (strcmp(SQLSTATE,"24000") != 0)
 )
 {
 printf("[Column-1] Length = %d ",
 hv_empnum_length); 
 hv_emp_num[hv_empnum_length] = '\0';
 printf(" VARIABLE POINTER CONTAINS = %s\n",
 hv_emp_num); 
 printf("[Column-2] Length =%d ",
 hv_empname_length);
 hv_emp_name[hv_empname_length] = '\0';
 printf(" VARIABLE POINTER CONTAINS = %s\n",
 hv_emp_name); 
 EXEC SQL FETCH :hv_curspec 
 INTO SQL DESCRIPTOR 'out_sqlda';
 } /* while */
Example 10-1. C VARIABLE_POINTER Example (page2of3)
C










