- 论坛徽章:
- 3
|
s7.c代码如下:
1
2 /* Result Sets Interface */
3 #ifndef SQL_CRSR
4 # define SQL_CRSR
5 struct sql_cursor
6 {
7 unsigned int curocn;
8 void *ptr1;
9 void *ptr2;
10 unsigned int magic;
11 };
12 typedef struct sql_cursor sql_cursor;
13 typedef struct sql_cursor SQL_CURSOR;
14 #endif /* SQL_CRSR */
15
16 /* Thread Safety */
17 typedef void * sql_context;
18 typedef void * SQL_CONTEXT;
19
20 /* Object support */
21 struct sqltvn
22 {
23 unsigned char *tvnvsn;
24 unsigned short tvnvsnl;
25 unsigned char *tvnnm;
26 unsigned short tvnnml;
27 unsigned char *tvnsnm;
28 unsigned short tvnsnml;
29 };
30 typedef struct sqltvn sqltvn;
31
32 struct sqladts
33 {
34 unsigned int adtvsn;
35 unsigned short adtmode;
36 unsigned short adtnum;
37 sqltvn adttvn[1];
38 };
39 typedef struct sqladts sqladts;
40
41 static struct sqladts sqladt = {
42 1,1,0,
43 };
44
45 /* Binding to PL/SQL Records */
46 struct sqltdss
47 {
48 unsigned int tdsvsn;
49 unsigned short tdsnum;
50 unsigned char *tdsval[1];
51 };
52 typedef struct sqltdss sqltdss;
53 static struct sqltdss sqltds =
54 {
55 1,
56 0,
57 };
58
59 /* File name & Package Name */
60 struct sqlcxp
61 {
62 unsigned short fillen;
63 char filnam[7];
64 };
65 static const struct sqlcxp sqlfpn =
66 {
67 6,
68 "s7.cpp"
69 };
70
71
72 static unsigned int sqlctx = 4412;
73
74
75 static struct sqlexd {
76 unsigned long sqlvsn;
77 unsigned int arrsiz;
78 unsigned int iters;
79 unsigned int offset;
80 unsigned short selerr;
81 unsigned short sqlety;
82 unsigned int occurs;
83 const short *cud;
84 unsigned char *sqlest;
85 const char *stmt;
86 sqladts *sqladtp;
87 sqltdss *sqltdsp;
88 unsigned char **sqphsv;
89 unsigned long *sqphsl;
90 int *sqphss;
91 short **sqpind;
92 int *sqpins;
93 unsigned long *sqparm;
94 unsigned long **sqparc;
95 unsigned short *sqpadto;
96 unsigned short *sqptdso;
97 unsigned int sqlcmax;
98 unsigned int sqlcmin;
99 unsigned int sqlcincr;
100 unsigned int sqlctimeout;
101 unsigned int sqlcnowait;
102 int sqfoff;
103 unsigned int sqcmod;
104 unsigned int sqfmod;
105 unsigned char *sqhstv[4];
106 unsigned long sqhstl[4];
107 int sqhsts[4];
108 short *sqindv[4];
109 int sqinds[4];
110 unsigned long sqharm[4];
111 unsigned long *sqharc[4];
112 unsigned short sqadto[4];
113 unsigned short sqtdso[4];
114 } sqlstm = {12,4};
115
116 // Prototypes
117 extern "C" {
118 void sqlcxt (void **, unsigned int *,
119 struct sqlexd *, const struct sqlcxp *);
120 void sqlcx2t(void **, unsigned int *,
121 struct sqlexd *, const struct sqlcxp *);
122 void sqlbuft(void **, char *);
123 void sqlgs2t(void **, char *);
124 void sqlorat(void **, unsigned int *, void *);
125 }
126
127 // Forms Interface
128 static const int IAPSUCC = 0;
129 static const int IAPFAIL = 1403;
130 static const int IAPFTL = 535;
131 extern "C" { void sqliem(char *, int *); }
132
133 typedef struct { unsigned short len; unsigned char arr[1]; } VARCHAR;
134 typedef struct { unsigned short len; unsigned char arr[1]; } varchar;
135
136 /* cud (compilation unit data) array */
137 static const short sqlcud0[] =
138 {12,4130,852,0,0,
139 5,0,0,1,0,0,27,30,0,0,4,4,0,1,0,1,97,0,0,1,97,0,0,1,10,0,0,1,10,0,0,
140 36,0,0,2,0,0,17,36,0,0,1,1,0,1,0,1,9,0,0,
141 55,0,0,2,0,0,21,37,0,0,2,2,0,1,0,1,3,0,0,1,3,0,0,
142 78,0,0,2,0,0,21,40,0,0,2,2,0,1,0,1,3,0,0,1,3,0,0,
143 101,0,0,2,0,0,17,47,0,0,1,1,0,1,0,1,9,0,0,
144 120,0,0,2,0,0,21,48,0,0,2,2,0,1,0,1,3,0,0,1,3,0,0,
145 143,0,0,3,0,0,30,49,0,0,0,0,0,1,0,
146 };
147
148
149 #include <stdio.h>
150 #include <sqlca.h>
151 #include <stdlib.h>
152 #include <sqlda.h>
153 #include <sqlcpr.h>
154 #include <strings.h>
155 #include <fcntl.h>
156 #include <unistd.h>
157 #include <string.h>
158 #define USERNAME "test"
159 #define PASSWORD "test"
160 #include <oraca.h>
161
162 /* EXEC ORACLE OPTION (ORACA=YES); */
163
164 /* EXEC SQL BEGIN DECLARE SECTION; */
165
166 char *username = USERNAME;
167 char *password = PASSWORD;
168 /* varchar dynstmt[1024]; */
169 struct { unsigned short len; unsigned char arr[1024]; } dynstmt;
170
171 int empno = 1234;
172 int deptno1 = 97;
173 int deptno2 = 99;
174 /* EXEC SQL END DECLARE SECTION; */
175
176
177 //void dyn_error();
178 main()
179 {
180 //char v_err[100]= "Oracle error";
181 //EXEC SQL WHENEVER SQLERROR DO dyn_error(v_err);
182 //oraca.orastxtf = ORASTFERR;
183 /* EXEC SQL CONNECT :username IDENTIFIED BY :password; */
184
185 {
186 struct sqlexd sqlstm;
187 sqlorat((void **)0, &sqlctx, &oraca);
188 sqlstm.sqlvsn = 12;
189 sqlstm.arrsiz = 4;
190 sqlstm.sqladtp = &sqladt;
191 sqlstm.sqltdsp = &sqltds;
192 sqlstm.iters = (unsigned int )10;
193 sqlstm.offset = (unsigned int )5;
194 sqlstm.cud = sqlcud0;
195 sqlstm.sqlest = (unsigned char *)&sqlca;
196 sqlstm.sqlety = (unsigned short)256;
197 sqlstm.occurs = (unsigned int )0;
198 sqlstm.sqhstv[0] = (unsigned char *)username;
199 sqlstm.sqhstl[0] = (unsigned long )0;
200 sqlstm.sqhsts[0] = ( int )0;
201 sqlstm.sqindv[0] = ( short *)0;
202 sqlstm.sqinds[0] = ( int )0;
203 sqlstm.sqharm[0] = (unsigned long )0;
204 sqlstm.sqadto[0] = (unsigned short )0;
205 sqlstm.sqtdso[0] = (unsigned short )0;
206 sqlstm.sqhstv[1] = (unsigned char *)password;
207 sqlstm.sqhstl[1] = (unsigned long )0;
208 sqlstm.sqhsts[1] = ( int )0;
209 sqlstm.sqindv[1] = ( short *)0;
210 sqlstm.sqinds[1] = ( int )0;
211 sqlstm.sqharm[1] = (unsigned long )0;
212 sqlstm.sqadto[1] = (unsigned short )0;
213 sqlstm.sqtdso[1] = (unsigned short )0;
214 sqlstm.sqphsv = sqlstm.sqhstv;
215 sqlstm.sqphsl = sqlstm.sqhstl;
216 sqlstm.sqphss = sqlstm.sqhsts;
217 sqlstm.sqpind = sqlstm.sqindv;
218 sqlstm.sqpins = sqlstm.sqinds;
219 sqlstm.sqparm = sqlstm.sqharm;
220 sqlstm.sqparc = sqlstm.sqharc;
221 sqlstm.sqpadto = sqlstm.sqadto;
222 sqlstm.sqptdso = sqlstm.sqtdso;
223 sqlstm.sqlcmax = (unsigned int )100;
224 sqlstm.sqlcmin = (unsigned int )2;
225 sqlstm.sqlcincr = (unsigned int )1;
226 sqlstm.sqlctimeout = (unsigned int )0;
227 sqlstm.sqlcnowait = (unsigned int )0;
228 sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
229 }
230
231
232 puts("\nConnected to Oracle.\n");
233 strcpy(dynstmt.arr,"INSERT INTO tp_hxl_emp (EMPNO, DEPTNO) VALUES (:v1, :v2)");
234 dynstmt.len = strlen(dynstmt.arr);
235 puts((char *) dynstmt.arr);
236 printf(" v1 = %d, v2 = %d\n", empno, deptno1);
237 /* EXEC SQL PREPARE S FROM :dynstmt; */
238
239 {
240 struct sqlexd sqlstm;
241 sqlorat((void **)0, &sqlctx, &oraca);
242 sqlstm.sqlvsn = 12;
243 sqlstm.arrsiz = 4;
244 sqlstm.sqladtp = &sqladt;
245 sqlstm.sqltdsp = &sqltds;
246 sqlstm.stmt = "";
247 sqlstm.iters = (unsigned int )1;
248 sqlstm.offset = (unsigned int )36;
249 sqlstm.cud = sqlcud0;
250 sqlstm.sqlest = (unsigned char *)&sqlca;
251 sqlstm.sqlety = (unsigned short)256;
252 sqlstm.occurs = (unsigned int )0;
253 sqlstm.sqhstv[0] = (unsigned char *)&dynstmt;
254 sqlstm.sqhstl[0] = (unsigned long )1026;
255 sqlstm.sqhsts[0] = ( int )0;
256 sqlstm.sqindv[0] = ( short *)0;
257 sqlstm.sqinds[0] = ( int )0;
258 sqlstm.sqharm[0] = (unsigned long )0;
259 sqlstm.sqadto[0] = (unsigned short )0;
260 sqlstm.sqtdso[0] = (unsigned short )0;
261 sqlstm.sqphsv = sqlstm.sqhstv;
262 sqlstm.sqphsl = sqlstm.sqhstl;
263 sqlstm.sqphss = sqlstm.sqhsts;
264 sqlstm.sqpind = sqlstm.sqindv;
265 sqlstm.sqpins = sqlstm.sqinds;
266 sqlstm.sqparm = sqlstm.sqharm;
267 sqlstm.sqparc = sqlstm.sqharc;
268 sqlstm.sqpadto = sqlstm.sqadto;
269 sqlstm.sqptdso = sqlstm.sqtdso;
270 sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
271 }
272
273
274 /* EXEC SQL EXECUTE S USING :empno, :deptno1; */
275
276 {
277 struct sqlexd sqlstm;
278 sqlorat((void **)0, &sqlctx, &oraca);
279 sqlstm.sqlvsn = 12;
280 sqlstm.arrsiz = 4;
281 sqlstm.sqladtp = &sqladt;
282 sqlstm.sqltdsp = &sqltds;
283 sqlstm.stmt = "";
284 sqlstm.iters = (unsigned int )1;
285 sqlstm.offset = (unsigned int )55;
286 sqlstm.cud = sqlcud0;
287 sqlstm.sqlest = (unsigned char *)&sqlca;
288 sqlstm.sqlety = (unsigned short)256;
289 sqlstm.occurs = (unsigned int )0;
290 sqlstm.sqhstv[0] = (unsigned char *)&empno;
291 sqlstm.sqhstl[0] = (unsigned long )sizeof(int);
292 sqlstm.sqhsts[0] = ( int )0;
293 sqlstm.sqindv[0] = ( short *)0;
294 sqlstm.sqinds[0] = ( int )0;
295 sqlstm.sqharm[0] = (unsigned long )0;
296 sqlstm.sqadto[0] = (unsigned short )0;
297 sqlstm.sqtdso[0] = (unsigned short )0;
298 sqlstm.sqhstv[1] = (unsigned char *)&deptno1;
299 sqlstm.sqhstl[1] = (unsigned long )sizeof(int);
300 sqlstm.sqhsts[1] = ( int )0;
301 sqlstm.sqindv[1] = ( short *)0;
302 sqlstm.sqinds[1] = ( int )0;
303 sqlstm.sqharm[1] = (unsigned long )0;
304 sqlstm.sqadto[1] = (unsigned short )0;
305 sqlstm.sqtdso[1] = (unsigned short )0;
306 sqlstm.sqphsv = sqlstm.sqhstv;
307 sqlstm.sqphsl = sqlstm.sqhstl;
308 sqlstm.sqphss = sqlstm.sqhsts;
309 sqlstm.sqpind = sqlstm.sqindv;
310 sqlstm.sqpins = sqlstm.sqinds;
311 sqlstm.sqparm = sqlstm.sqharm;
312 sqlstm.sqparc = sqlstm.sqharc;
313 sqlstm.sqpadto = sqlstm.sqadto;
314 sqlstm.sqptdso = sqlstm.sqtdso;
315 sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
316 }
317
318
319 empno++;
320 printf(" v1 = %d, v2 = %d\n", empno, deptno2);
321 /* EXEC SQL EXECUTE S USING :empno, :deptno2; */
322
323 {
324 struct sqlexd sqlstm;
325 sqlorat((void **)0, &sqlctx, &oraca);
326 sqlstm.sqlvsn = 12;
327 sqlstm.arrsiz = 4;
328 sqlstm.sqladtp = &sqladt;
329 sqlstm.sqltdsp = &sqltds;
330 sqlstm.stmt = "";
331 sqlstm.iters = (unsigned int )1;
332 sqlstm.offset = (unsigned int )78;
333 sqlstm.cud = sqlcud0;
334 sqlstm.sqlest = (unsigned char *)&sqlca;
335 sqlstm.sqlety = (unsigned short)256;
336 sqlstm.occurs = (unsigned int )0;
337 sqlstm.sqhstv[0] = (unsigned char *)&empno;
338 sqlstm.sqhstl[0] = (unsigned long )sizeof(int);
339 sqlstm.sqhsts[0] = ( int )0;
340 sqlstm.sqindv[0] = ( short *)0;
341 sqlstm.sqinds[0] = ( int )0;
342 sqlstm.sqharm[0] = (unsigned long )0;
343 sqlstm.sqadto[0] = (unsigned short )0;
344 sqlstm.sqtdso[0] = (unsigned short )0;
345 sqlstm.sqhstv[1] = (unsigned char *)&deptno2;
346 sqlstm.sqhstl[1] = (unsigned long )sizeof(int);
347 sqlstm.sqhsts[1] = ( int )0;
348 sqlstm.sqindv[1] = ( short *)0;
349 sqlstm.sqinds[1] = ( int )0;
350 sqlstm.sqharm[1] = (unsigned long )0;
351 sqlstm.sqadto[1] = (unsigned short )0;
352 sqlstm.sqtdso[1] = (unsigned short )0;
353 sqlstm.sqphsv = sqlstm.sqhstv;
354 sqlstm.sqphsl = sqlstm.sqhstl;
355 sqlstm.sqphss = sqlstm.sqhsts;
356 sqlstm.sqpind = sqlstm.sqindv;
357 sqlstm.sqpins = sqlstm.sqinds;
358 sqlstm.sqparm = sqlstm.sqharm;
359 sqlstm.sqparc = sqlstm.sqharc;
360 sqlstm.sqpadto = sqlstm.sqadto;
361 sqlstm.sqptdso = sqlstm.sqtdso;
362 sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
363 }
364
365
366
367 strcpy(dynstmt.arr, "DELETE FROM tp_hxl_emp WHERE DEPTNO = :v1 OR DEPTNO = :v2");
368 dynstmt.len = strlen(dynstmt.arr);
369 puts((char *) dynstmt.arr);
370 printf(" v1 = %d, v2 = %d\n", deptno1, deptno2);
371 /*语句改变,必须重新 PREPARE*/
372 /* EXEC SQL PREPARE S FROM :dynstmt; */
373
374 {
375 struct sqlexd sqlstm;
376 sqlorat((void **)0, &sqlctx, &oraca);
377 sqlstm.sqlvsn = 12;
378 sqlstm.arrsiz = 4;
379 sqlstm.sqladtp = &sqladt;
380 sqlstm.sqltdsp = &sqltds;
381 sqlstm.stmt = "";
382 sqlstm.iters = (unsigned int )1;
383 sqlstm.offset = (unsigned int )101;
384 sqlstm.cud = sqlcud0;
385 sqlstm.sqlest = (unsigned char *)&sqlca;
386 sqlstm.sqlety = (unsigned short)256;
387 sqlstm.occurs = (unsigned int )0;
388 sqlstm.sqhstv[0] = (unsigned char *)&dynstmt;
389 sqlstm.sqhstl[0] = (unsigned long )1026;
390 sqlstm.sqhsts[0] = ( int )0;
391 sqlstm.sqindv[0] = ( short *)0;
392 sqlstm.sqinds[0] = ( int )0;
393 sqlstm.sqharm[0] = (unsigned long )0;
394 sqlstm.sqadto[0] = (unsigned short )0;
395 sqlstm.sqtdso[0] = (unsigned short )0;
396 sqlstm.sqphsv = sqlstm.sqhstv;
397 sqlstm.sqphsl = sqlstm.sqhstl;
398 sqlstm.sqphss = sqlstm.sqhsts;
399 sqlstm.sqpind = sqlstm.sqindv;
400 sqlstm.sqpins = sqlstm.sqinds;
401 sqlstm.sqparm = sqlstm.sqharm;
402 sqlstm.sqparc = sqlstm.sqharc;
403 sqlstm.sqpadto = sqlstm.sqadto;
404 sqlstm.sqptdso = sqlstm.sqtdso;
405 sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
406 }
407
408
409 /* EXEC SQL EXECUTE S USING :deptno1, :deptno2; */
410
411 {
412 struct sqlexd sqlstm;
413 sqlorat((void **)0, &sqlctx, &oraca);
414 sqlstm.sqlvsn = 12;
415 sqlstm.arrsiz = 4;
416 sqlstm.sqladtp = &sqladt;
417 sqlstm.sqltdsp = &sqltds;
418 sqlstm.stmt = "";
419 sqlstm.iters = (unsigned int )1;
420 sqlstm.offset = (unsigned int )120;
421 sqlstm.cud = sqlcud0;
422 sqlstm.sqlest = (unsigned char *)&sqlca;
423 sqlstm.sqlety = (unsigned short)256;
424 sqlstm.occurs = (unsigned int )0;
425 sqlstm.sqhstv[0] = (unsigned char *)&deptno1;
426 sqlstm.sqhstl[0] = (unsigned long )sizeof(int);
427 sqlstm.sqhsts[0] = ( int )0;
428 sqlstm.sqindv[0] = ( short *)0;
429 sqlstm.sqinds[0] = ( int )0;
430 sqlstm.sqharm[0] = (unsigned long )0;
431 sqlstm.sqadto[0] = (unsigned short )0;
432 sqlstm.sqtdso[0] = (unsigned short )0;
433 sqlstm.sqhstv[1] = (unsigned char *)&deptno2;
434 sqlstm.sqhstl[1] = (unsigned long )sizeof(int);
435 sqlstm.sqhsts[1] = ( int )0;
436 sqlstm.sqindv[1] = ( short *)0;
437 sqlstm.sqinds[1] = ( int )0;
438 sqlstm.sqharm[1] = (unsigned long )0;
439 sqlstm.sqadto[1] = (unsigned short )0;
440 sqlstm.sqtdso[1] = (unsigned short )0;
441 sqlstm.sqphsv = sqlstm.sqhstv;
442 sqlstm.sqphsl = sqlstm.sqhstl;
443 sqlstm.sqphss = sqlstm.sqhsts;
444 sqlstm.sqpind = sqlstm.sqindv;
445 sqlstm.sqpins = sqlstm.sqinds;
446 sqlstm.sqparm = sqlstm.sqharm;
447 sqlstm.sqparc = sqlstm.sqharc;
448 sqlstm.sqpadto = sqlstm.sqadto;
449 sqlstm.sqptdso = sqlstm.sqtdso;
450 sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
451 }
452
453
454 /* EXEC SQL COMMIT RELEASE; */
455
456 {
457 struct sqlexd sqlstm;
458 sqlorat((void **)0, &sqlctx, &oraca);
459 sqlstm.sqlvsn = 12;
460 sqlstm.arrsiz = 4;
461 sqlstm.sqladtp = &sqladt;
462 sqlstm.sqltdsp = &sqltds;
463 sqlstm.iters = (unsigned int )1;
464 sqlstm.offset = (unsigned int )143;
465 sqlstm.cud = sqlcud0;
466 sqlstm.sqlest = (unsigned char *)&sqlca;
467 sqlstm.sqlety = (unsigned short)256;
468 sqlstm.occurs = (unsigned int )0;
469 sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
470 }
471
472
473 puts("\nComplete!\n");
474 exit(0);
475 }
476
477
478 /*
479 void dyn_error(char *msg)
480 {
481 printf("\n%s", msg);
482 printf("\n%.*s\n",sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc);
483 printf("in \"%.*s...\"\n",oraca.orastxt.orastxtl, oraca.orastxt.orastxtc);
484 printf("on line %d of %.*s.\n\n",oraca.oraslnr, oraca.orasfnm.orasfnml,
485 oraca.orasfnm.orasfnmc);
486 EXEC SQL WHENEVER SQLERROR CONTINUE;
487 EXEC SQL ROLLBACK RELEASE;
488 exit(1);
489 }
490 */ |
|