3 exec sql include sqlca;
5 /* just a test comment */ exec sql whenever sqlerror do PrintAndStop(msg);
6 exec sql whenever sqlwarning do warn();
8 static void PrintAndStop(char *msg)
10 fprintf(stderr, "Error in statement '%s':\n", msg);
15 static void warn(void)
17 fprintf(stderr, "Warning: At least one column was truncated\n");
21 exec sql define AMOUNT 6;
23 exec sql type intarray is int[AMOUNT];
24 exec sql type string is char(8);
26 typedef int intarray[AMOUNT];
31 exec sql begin declare section;
35 char letter[AMOUNT][1];
36 struct name_letter_struct
41 } name_letter[AMOUNT];
49 char *connection="pm";
50 exec sql end declare section;
51 exec sql var name is string(AMOUNT);
56 if ((dbgs = fopen("log", "w")) != NULL)
59 strcpy(msg, "connect");
60 exec sql connect to mm as main;
62 strcpy(msg, "connect");
63 exec sql connect to pm;
65 strcpy(msg, "create");
66 exec sql at main create table "Test" (name char(8), amount int, letter char(1));
67 exec sql create table "Test" (name char(8), amount int, letter char(1));
69 strcpy(msg, "commit");
70 exec sql at main commit;
73 strcpy(msg, "set connection");
74 exec sql set connection to main;
76 strcpy(msg, "execute insert 1");
77 sprintf(command, "insert into \"Test\" (name, amount, letter) values ('db: ''mm''', 1, 'f')");
78 exec sql execute immediate :command;
79 printf("New tuple got OID = %ld\n", sqlca.sqlerrd[1]);
81 sprintf(command, "insert into \"Test\" (name, amount, letter) values ('db: \\\'mm\\\'', 2, 't')");
82 exec sql execute immediate :command;
84 strcpy(msg, "execute insert 2");
85 sprintf(command, "insert into \"Test\" (name, amount, letter) values ('db: ''pm''', 1, 'f')");
86 exec sql at pm execute immediate :command;
88 strcpy(msg, "execute insert 3");
89 sprintf(command, "insert into \"Test\" (name, amount, letter) select name, amount+10, letter from \"Test\"");
90 exec sql execute immediate :command;
92 printf("Inserted %ld tuples via execute immediate\n", sqlca.sqlerrd[2]);
94 strcpy(msg, "execute insert 4");
95 sprintf(command, "insert into \"Test\" (name, amount, letter) select name, amount+?, letter from \"Test\"");
96 exec sql prepare I from :command;
97 exec sql at pm execute I using :increment;
99 printf("Inserted %ld tuples via prepared execute\n", sqlca.sqlerrd[2]);
101 strcpy(msg, "commit");
104 /* Start automatic transactioning for connection pm. */
105 exec sql at pm set autocommit to on;
106 exec sql at pm begin transaction;
108 strcpy(msg, "select");
109 exec sql select * into :name, :amount, :letter from "Test";
111 printf("Database: mm\n");
112 for (i=0, j=sqlca.sqlerrd[2]; i<j; i++)
114 exec sql begin declare section;
115 char n[8], l = letter[i][0];
117 exec sql end declare section;
119 strncpy(n, name[i], 8);
120 printf("name[%d]=%8.8s\tamount[%d]=%d\tletter[%d]=%c\n", i, n, i, a, i, l);
123 strcpy(msg, "insert");
124 exec sql at pm insert into "Test" (name, amount, letter) values (:n, :a, :l);
127 strcpy(msg, "commit");
128 exec sql at pm commit;
130 strcpy(msg, "select");
131 exec sql at :connection select name, amount, letter into :name, :amount, :letter from "Test";
133 printf("Database: %s\n", connection);
134 for (i=0, j=sqlca.sqlerrd[2]; i<j; i++)
135 printf("name[%d]=%8.8s\tamount[%d]=%d\tletter[%d]=%c\n", i, name[i], i, amount[i],i, letter[i][0]);
137 strcpy(msg, "select");
138 exec sql at pm select name, amount, letter into :name_letter from "Test";
140 strcpy(msg, "commit");
143 strcpy(msg, "select");
144 exec sql at pm select name, amount, letter into :name_letter:ind from "Test";
146 printf("Database: pm\n");
147 for (i=0, j=sqlca.sqlerrd[2]; i<j; i++)
148 printf("name[%d]=%8.8s\tamount[%d]=%d\tletter[%d]=%c\n", i, name_letter[i].name, i, name_letter[i].amount,i, name_letter[i].letter);
150 /* Start automatic transactioning for connection main. */
151 exec sql set autocommit to on;
154 exec sql drop table "Test";
155 exec sql at pm drop table "Test";
157 strcpy(msg, "disconnect");
158 exec sql disconnect main;
159 exec sql disconnect pm;