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