#include #include EXEC SQL include ../regression; EXEC SQL BEGIN DECLARE SECTION; struct TBempl { long idnum; char name[21]; short accs; char byte[20]; }; EXEC SQL END DECLARE SECTION; EXEC SQL WHENEVER SQLERROR STOP; int main (void) { EXEC SQL BEGIN DECLARE SECTION; struct TBempl empl; char *pointer = NULL; char *data = "\\001\\155\\000\\212"; EXEC SQL END DECLARE SECTION; int i; ECPGdebug (1, stderr); empl.idnum = 1; EXEC SQL connect to REGRESSDB1; EXEC SQL set bytea_output = escape; EXEC SQL create table empl (idnum integer, name char (20), accs smallint, byte bytea); EXEC SQL insert into empl values (1, 'first user', 320, :data); 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; printf ("name=%s, accs=%d byte=%s\n", empl.name, empl.accs, empl.byte); EXEC SQL CLOSE C; memset(empl.name, 0, 21L); 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,:empl.accs,:empl.byte; 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<4; i++) printf("(%o)", (unsigned char)empl.byte[i]); printf("\n"); EXEC SQL DECLARE A BINARY CURSOR FOR select byte from empl where idnum =:empl.idnum; EXEC SQL OPEN A; EXEC SQL FETCH A INTO :pointer; EXEC SQL CLOSE A; if (pointer) { printf ("pointer="); for (i=0; i<4; i++) printf("(%o)", (unsigned char)pointer[i]); printf("\n"); free(pointer); } EXEC SQL disconnect; exit (0); }