cat > script.cc <<'+-+-+-+-+-END-OF-FILE-+-+-+-+-+'
#include	<mscc.h>
#include	<stdlib.h>

void	error();

EXEC SQL INCLUDE SQLCA ;
EXEC SQL BEGIN DECLARE SECTION;
struct bulk{
	long	v_longint;
	int	v_int[10];
};
	char	v_char[32];
struct	bulk	v_bulk;
long	*v_buf;
EXEC SQL END DECLARE SECTION;

int	main (int argc, char** argv)
{
	int	i;
	EXEC SQL INIT;
	EXEC SQL DATABASE IS "TEST_DATABASE";
	EXEC SQL OPEN_TABLE type FOR UPDATE;
	v_buf = (long *) malloc (20*sizeof (long));
	v_bulk.v_longint = 10 * sizeof(int) ;
	for(i = 0; i < 10; i++)
	   v_bulk.v_int[i] = 100 + i;

	EXEC SQL DECLARE c CURSOR FOR SELECT FROM type ;
	EXEC SQL OPEN c;
	if(SQLCODE != 0) error(1);
	do {
		for(i = 0; i < 20; i++)
		   v_buf[i] = 0L;
		EXEC SQL FETCH c a_char,a_bulk INTO :v_char,:v_buf ;
		switch (SQLCODE)
		{
		case 0 : 
			printf("%s %ld %s\n",v_char,v_buf[0],(char *)(&v_buf[1]));
			if(strcmp("char",v_char) == 0) 
			{
				EXEC SQL DELETE FROM type WHERE CURRENT OF c;
				if(SQLCODE != 0) error(2);
			}
			else
			{
				EXEC SQL UPDATE type SET a_char,a_bulk VALUES :v_char,:v_bulk 
				WHERE CURRENT OF c;
				if(SQLCODE != 0) error(3);
			}
			 break;
		case 100: break;
		case 1 : printf(" lock busy\n");
			 break;
		default : error(4);
		}
	} while(SQLCODE == 0);
	EXEC SQL CLOSE c;

	strcpy(v_char,"char2");
	for(i = 0; i < 10; i++)
	   v_bulk.v_int[i] = 10000 + i;
	EXEC SQL INSERT INTO type (a_char, a_bulk) VALUES (:v_char,:v_bulk);
	if(SQLCODE != 0) error(5);

	EXEC SQL OPEN c;
	if(SQLCODE != 0) error(6);
	do {
	EXEC SQL FETCH c a_char,a_bulk INTO :v_char,:v_bulk ;
	switch (SQLCODE) {
		case 0 : 
	#ifndef SYS_OS_UNIX_UNICOS
	/* on Cray, SYS_OS_UNIX_UNICOS must be define in mscc.h; otherwise we
	 * will GV problem.
	 */
			printf("%s %ld  ",v_char,v_bulk.v_longint); 
	#else
			if (v_bulk.v_longint == 80)
				printf("%s %d  ",v_char,40); 
			else
				printf("%s %d  ",v_char,v_bulk.v_longint); 
	#endif
			for(i = 0; i < 10; i++)
			   printf("%d ",v_bulk.v_int[i]);
			printf("\n");
			 break;
		case 100: break;
		case 1 : printf(" lock busy\n");
			 break;
		default : error(7);
		}
	} while(SQLCODE == 0);
	EXEC SQL CLOSE c;
	EXEC SQL EXIT ;
	return 0;
}

void	error(i)
int i;
{
	printf("error number %d\n",i);
	printf("SQLCODE number %ld\n",SQLCODE);
	exit(1);
}
+-+-+-+-+-END-OF-FILE-+-+-+-+-+
chmod 644 script.cc
cat > stdout <<'+-+-+-+-+-END-OF-FILE-+-+-+-+-+'
char1 17 abcdefghijklmnopq
char 11 pqrstuvwxyz
char1 40  100 101 102 103 104 105 106 107 108 109 
char2 40  10000 10001 10002 10003 10004 10005 10006 10007 10008 10009 
+-+-+-+-+-END-OF-FILE-+-+-+-+-+
chmod 644 stdout
cat > tag <<'+-+-+-+-+-END-OF-FILE-+-+-+-+-+'
bulk data handling
+-+-+-+-+-END-OF-FILE-+-+-+-+-+
chmod 644 tag
