1#include <stdlib.h> 2#include <string.h> 3#include <stdlib.h> 4#include <stdio.h> 5 6exec sql include ../regression; 7 8exec sql whenever sqlerror sqlprint; 9 10int 11main(void) 12{ 13exec sql begin declare section; 14 int amount[8]; 15 int increment=100; 16 char name[8][8]; 17 char letter[8][1]; 18 char command[128]; 19exec sql end declare section; 20 int i,j; 21 22 ECPGdebug(1, stderr); 23 24 exec sql connect to REGRESSDB1 as main; 25 exec sql create table test (name char(8), amount int, letter char(1)); 26 exec sql commit; 27 28 sprintf(command, "insert into test (name, amount, letter) values ('db: ''r1''', 1, 'f')"); 29 exec sql execute immediate :command; 30 31 sprintf(command, "insert into test (name, amount, letter) values ('db: ''r1''', 2, 't')"); 32 exec sql execute immediate :command; 33 34 sprintf(command, "insert into test (name, amount, letter) select name, amount+10, letter from test"); 35 exec sql execute immediate :command; 36 37 printf("Inserted %ld tuples via execute immediate\n", sqlca.sqlerrd[2]); 38 39 sprintf(command, "insert into test (name, amount, letter) select name, amount+$1, letter from test"); 40 exec sql prepare I from :command; 41 exec sql execute I using :increment; 42 43 printf("Inserted %ld tuples via prepared execute\n", sqlca.sqlerrd[2]); 44 45 exec sql commit; 46 47 sprintf (command, "select * from test"); 48 49 exec sql prepare f from :command; 50 exec sql declare CUR cursor for f; 51 52 exec sql open CUR; 53 exec sql fetch 8 in CUR into :name, :amount, :letter; 54 55 for (i=0, j=sqlca.sqlerrd[2]; i<j; i++) 56 { 57 exec sql begin declare section; 58 char n[8], l = letter[i][0]; 59 int a = amount[i]; 60 exec sql end declare section; 61 62 strncpy(n, name[i], 8); 63 printf("name[%d]=%8.8s\tamount[%d]=%d\tletter[%d]=%c\n", i, n, i, a, i, l); 64 } 65 66 exec sql close CUR; 67 exec sql deallocate f; 68 69 sprintf (command, "select * from test where amount = $1"); 70 71 exec sql prepare f from :command; 72 exec sql declare CUR2 cursor for f; 73 74 exec sql open CUR2 using 1; 75 exec sql fetch in CUR2 into :name, :amount, :letter; 76 77 for (i=0, j=sqlca.sqlerrd[2]; i<j; i++) 78 { 79 exec sql begin declare section; 80 char n[8], l = letter[i][0]; 81 int a = amount[i]; 82 exec sql end declare section; 83 84 strncpy(n, name[i], 8); 85 printf("name[%d]=%8.8s\tamount[%d]=%d\tletter[%d]=%c\n", i, n, i, a, i, l); 86 } 87 88 exec sql close CUR2; 89 exec sql deallocate f; 90 91 sprintf (command, "select * from test where amount = $1"); 92 93 exec sql prepare f from :command; 94 exec sql execute f using 2 into :name, :amount, :letter; 95 96 for (i=0, j=sqlca.sqlerrd[2]; i<j; i++) 97 { 98 exec sql begin declare section; 99 char n[8], l = letter[i][0]; 100 int a = amount[i]; 101 exec sql end declare section; 102 103 strncpy(n, name[i], 8); 104 printf("name[%d]=%8.8s\tamount[%d]=%d\tletter[%d]=%c\n", i, n, i, a, i, l); 105 } 106 107 exec sql deallocate f; 108 exec sql drop table test; 109 exec sql commit; 110 exec sql disconnect; 111 112 return (0); 113} 114