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