#include #include EXEC SQL include ../regression; EXEC SQL typedef long mmInteger; EXEC SQL typedef char mmChar; EXEC SQL typedef short mmSmallInt; EXEC SQL BEGIN DECLARE SECTION; struct TBempl { mmInteger idnum; mmChar name[21]; mmSmallInt accs; mmChar byte[20]; }; EXEC SQL END DECLARE SECTION; int main (void) { EXEC SQL BEGIN DECLARE SECTION; struct TBempl empl; char *data = "\\001\\155\\000\\212"; union { mmSmallInt accs; char t[2]; } a; EXEC SQL END DECLARE SECTION; int i; ECPGdebug (1, stderr); empl.idnum = 1; EXEC SQL connect to REGRESSDB1; if (sqlca.sqlcode) { printf ("connect error = %ld\n", sqlca.sqlcode); exit (sqlca.sqlcode); } EXEC SQL create table empl (idnum integer, name char (20), accs smallint, byte bytea); if (sqlca.sqlcode) { printf ("create error = %ld\n", sqlca.sqlcode); exit (sqlca.sqlcode); } EXEC SQL insert into empl values (1, 'first user', 320,:data); if (sqlca.sqlcode) { printf ("insert error = %ld\n", sqlca.sqlcode); exit (sqlca.sqlcode); } EXEC SQL select name, accs, byte into :empl.name, :empl.accs, :empl.byte from empl where idnum =:empl.idnum; if (sqlca.sqlcode) { printf ("select error = %ld\n", sqlca.sqlcode); exit (sqlca.sqlcode); } printf ("name=%s, accs=%d byte=%s\n", empl.name, empl.accs, empl.byte); EXEC SQL DECLARE C CURSOR FOR select name, accs, byte from empl where idnum =:empl.idnum; EXEC SQL OPEN C; EXEC SQL FETCH C INTO:empl.name,:empl.accs,:empl.byte; if (sqlca.sqlcode) { printf ("fetch error = %ld\n", sqlca.sqlcode); exit (sqlca.sqlcode); } printf ("name=%s, accs=%d byte=%s\n", empl.name, empl.accs, empl.byte); memset(empl.name, 0, 21L); memset(empl.byte, '#', 20L); EXEC SQL DECLARE B BINARY CURSOR FOR select name, accs, byte from empl where idnum =:empl.idnum; EXEC SQL OPEN B; EXEC SQL FETCH B INTO :empl.name,:a.accs,:empl.byte; if (sqlca.sqlcode) { printf ("fetch error = %ld\n", sqlca.sqlcode); exit (sqlca.sqlcode); } EXEC SQL CLOSE B; /* do not print a.accs because big/little endian will have different outputs here */ printf ("name=%s, byte=", empl.name); for (i=0; i<20; i++) { if (empl.byte[i] == '#') break; printf("(%o)", (unsigned char)empl.byte[i]); } printf("\n"); EXEC SQL disconnect; exit (0); }