#include exec sql include ../regression; EXEC SQL WHENEVER sqlerror sqlprint; EXEC SQL WHENEVER sqlwarning sqlprint; EXEC SQL WHENEVER not found sqlprint; EXEC SQL TYPE customer IS struct { varchar name[50]; int phone; }; EXEC SQL TYPE cust_ind IS struct ind { short name_ind; short phone_ind; }; EXEC SQL TYPE company IS struct { customer customers[10]; }; int main() { EXEC SQL begin declare section; customer custs1[10]; cust_ind inds[10]; typedef struct { varchar name[50]; int phone; } customer2; customer2 custs2[10]; struct customer3 { varchar name[50]; int phone; } custs3[10]; struct customer4 { varchar name[50]; int phone; } custs4; company acme; int r; varchar onlyname[2][50]; EXEC SQL end declare section; ECPGdebug(1, stderr); EXEC SQL connect to REGRESSDB1; EXEC SQL create table customers (c varchar(50), p int); /* First we'll insert some data using C variable references */ strcpy(custs1[0].name.arr, "John Doe"); custs1[0].name.len = strlen(custs1[0].name.arr); custs1[0].phone = 12345; strcpy(acme.customers[1].name.arr, "Jane Doe"); acme.customers[1].name.len = strlen(acme.customers[1].name.arr); acme.customers[1].phone = 67890; EXEC SQL insert into customers values (:custs1->name, :custs1[0].phone); EXEC SQL insert into customers values (:acme.customers[1].name, :acme.customers[1].phone); /* Clear the array, to be sure reading back into it actually gets data */ memset(custs1, 0, sizeof(customer) * 10); /* Now read back the data */ EXEC SQL select * INTO :custs1:inds from customers limit 2; printf("custs1:\n"); for (r = 0; r < 2; r++) { printf( "name - %s\n", custs1[r].name.arr ); printf( "phone - %d\n", custs1[r].phone ); } EXEC SQL select * INTO :custs2:inds from customers limit 2; printf("\ncusts2:\n"); for (r = 0; r < 2; r++) { printf( "name - %s\n", custs2[r].name.arr ); printf( "phone - %d\n", custs2[r].phone ); } EXEC SQL select * INTO :custs3:inds from customers limit 2; printf("\ncusts3:\n"); for (r = 0; r < 2; r++) { printf( "name - %s\n", custs3[r].name.arr ); printf( "phone - %d\n", custs3[r].phone ); } EXEC SQL select * INTO :custs4:inds[0] from customers limit 1; printf("\ncusts4:\n"); printf( "name - %s\n", custs4.name.arr ); printf( "phone - %d\n", custs4.phone ); EXEC SQL select c INTO :onlyname from customers limit 2; printf("\nname:\n"); for (r = 0; r < 2; r++) { printf( "name - %s\n", onlyname[r].arr ); } EXEC SQL disconnect all; return 0; }