SQL/MX Programming Manual for C and COBOL (G06.24+, H06.03+)

C Sample Programs
HP NonStop SQL/MX Programming Manual for C and COBOL523627-004
A-26
Using a Dynamic SQL Rowset
Using a Dynamic SQL Rowset
Example A-8 shows a dynamic embedded SQL program that uses descriptor areas.
Example A-8. Dynamic SQL Rowsets (page 1 of 2)
/*****************************************************/
void dynamic_direct()
/*****************************************************/
{
/* Initialize all variables */
printf("DYNAMIC_DIRECT:\n");
strcpy(in_desc,"inscols ");
SQLSTATE[5] = '\0';
memset(statementBuffer, ' ', 390);
statementBuffer[389] = '\0';
output_rowset_size = 10;
/* INSERTING 10 ROWS */
EXEC SQL DELETE FROM CAT.SCH.DYNAMIC5;
printf("prepare insert:\n");
strcpy(statementBuffer,
"INSERT INTO CAT.SCH.DYNAMIC5 VALUES ( 'jim', ?[10] );" );
/* construct S1 from of INSERT statement */
EXEC SQL PREPARE S1 FROM :statementBuffer;
printf("SQLSTATE after prepare is %s\n", SQLSTATE);
printf("SQLCODE after prepare is %d\n", SQLCODE);
EXEC SQL PREPARE S1 FROM :statementBuffer;
num_in = 30;
/* create SQLDA for INSERT columns */
EXEC SQL ALLOCATE DESCRIPTOR GLOBAL :in_desc with MAX :num_in;
printf("SQLSTATE after allocate is %s\n", SQLSTATE);
/* populate the SQLDA */
EXEC SQL DESCRIBE INPUT S1 USING SQL DESCRIPTOR :in_desc;
printf("SQLSTATE after describe is %s\n", SQLSTATE);
num = 1;
EXEC SQL GET DESCRIPTOR :in_desc :output_rowset_size = ROWSET_SIZE;
printf("ROWSET_SIZE after prepare & describe is %d\n", output_rowset_size);
EXEC SQL GET DESCRIPTOR :in_desc :output_rowset_size = COUNT;
printf("COUNT after prepare & describe is %d\n", output_rowset_size);