71 lines
1.7 KiB
Plaintext
71 lines
1.7 KiB
Plaintext
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
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);
|
|
}
|