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