1#include <stdio.h> 2#include <stdlib.h> 3 4EXEC SQL include ../regression; 5 6EXEC SQL BEGIN DECLARE SECTION; 7struct TBempl 8{ 9 long idnum; 10 char name[21]; 11 short accs; 12 char byte[20]; 13}; 14EXEC SQL END DECLARE SECTION; 15 16EXEC SQL WHENEVER SQLERROR STOP; 17 18int 19main (void) 20{ 21 EXEC SQL BEGIN DECLARE SECTION; 22 struct TBempl empl; 23 char *pointer = NULL; 24 char *data = "\\001\\155\\000\\212"; 25 EXEC SQL END DECLARE SECTION; 26 int i; 27 28 ECPGdebug (1, stderr); 29 30 empl.idnum = 1; 31 EXEC SQL connect to REGRESSDB1; 32 EXEC SQL set bytea_output = escape; 33 EXEC SQL create table empl 34 (idnum integer, name char (20), accs smallint, byte bytea); 35 EXEC SQL insert into empl values (1, 'first user', 320, :data); 36 EXEC SQL DECLARE C CURSOR FOR select name, accs, byte from empl where idnum =:empl.idnum; 37 EXEC SQL OPEN C; 38 EXEC SQL FETCH C INTO:empl.name,:empl.accs,:empl.byte; 39 printf ("name=%s, accs=%d byte=%s\n", empl.name, empl.accs, empl.byte); 40 41 EXEC SQL CLOSE C; 42 43 memset(empl.name, 0, 21L); 44 EXEC SQL DECLARE B BINARY CURSOR FOR select name, accs, byte from empl where idnum =:empl.idnum; 45 EXEC SQL OPEN B; 46 EXEC SQL FETCH B INTO :empl.name,:empl.accs,:empl.byte; 47 EXEC SQL CLOSE B; 48 49 /* do not print a.accs because big/little endian will have different outputs here */ 50 printf ("name=%s, byte=", empl.name); 51 for (i=0; i<4; i++) 52 printf("(%o)", (unsigned char)empl.byte[i]); 53 printf("\n"); 54 55 EXEC SQL DECLARE A BINARY CURSOR FOR select byte from empl where idnum =:empl.idnum; 56 EXEC SQL OPEN A; 57 EXEC SQL FETCH A INTO :pointer; 58 EXEC SQL CLOSE A; 59 60 if (pointer) { 61 printf ("pointer="); 62 for (i=0; i<4; i++) 63 printf("(%o)", (unsigned char)pointer[i]); 64 printf("\n"); 65 free(pointer); 66 } 67 68 EXEC SQL disconnect; 69 exit (0); 70} 71