Dynamic Sql Q (esqlc)
Posted in 1996
Topics: Connectivity: ESQL/C, 4GL & Embedded SQL
I am looking some help writing dynamic sql in esqlc. I have been
trying to use the manuals for direction, but I still can't get it
to work. Allow me to explain the scenario.
I want to dynamically form an insert statement, prepare it once,
and then execute it multiple times with different data. So it
seems to me that this is a job for dynamic sql. After getting
thouroughly confused by the manuals, this is what I come up with.
NOTE: This is just a little proof of concept program, and everything
is hardwired. I just want to get this part working first.
$ struct sqlda *desc_area; /* Sql descriptor area */
$ char sql_stmt[MAXSQLSTMT];
char *char_ptr;
int i;
strcpy(sql_stmt, "INSERT INTO rmttncadv (rmttncadvsrl, rx_nmbr, dt_flld)");
strcat(sql_stmt, " VALUES ( 0, ?, ? );" );
$ PREPARE stmt_id FROM $sql_stmt;
$ DESCRIBE stmt_id INTO desc_area;
char_ptr = (char *) malloc( 7+1 );
sprintf( char_ptr, "1234567" );
desc_area->sqlvar[0].sqllen += 1;
desc_area->sqlvar[0].sqlind = NULL;
desc_area->sqlvar[0].sqldata = char_ptr;
char_ptr = (char *) malloc( 8+1 );
sprintf( char_ptr, "01-01-99" );
desc_area->sqlvar[1].sqllen += 1;
desc_area->sqlvar[1].sqlind = NULL;
desc_area->sqlvar[1].sqldata = char_ptr;
$ EXECUTE stmt_id USING DESCRIPTOR desc_area;
for ( i=0;i < 3; i++ )
free (desc_area->sqlvar[i].sqldata);
I get a segmentation fault when I execute the statement. Any help
or example code would be greatly appreciated.
Thanks,
Jeff Pickett
--
=======================================================|
Jeffrey D. Pickett | Stadtlanders Drug Company |
pickett@telerama.lm.com | 600 Penn Center Blvd. |
| Pittsburgh, PA 15235 |