免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4328 | 回复: 9
打印 上一主题 下一主题

proc varchar 类型变量问题 [复制链接]

论坛徽章:
3
数据库技术版块每日发帖之星
日期:2016-05-27 06:20:00数据库技术版块每日发帖之星
日期:2016-06-04 06:20:00数据库技术版块每日发帖之星
日期:2016-06-23 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-16 18:49 |只看该作者 |倒序浏览
我的proc程序里有这个变量定义
EXEC SQL BEGIN DECLARE SECTION;
        varchar dynstmt[1024];
EXEC SQL END DECLARE SECTION;

主体代码段里有这么一句
strcpy(dynstmt.arr,"INSERT INTO tp_hxl_emp (EMPNO, DEPTNO) VALUES (:v1, :v2)");

编译的时候报以下错误,请问大家是什么原因?
"s7.c", line 233.16: 1540-0256 (S) A parameter of type "char *" cannot be initialized with an expression of type "<unnamed-struct>".
"s7.c", line 233.16: 1540-1205 (I) The error occurred while converting to parameter 1 of "strcpy(char *, const char *)".
"s7.c", line 234.37: 1540-0256 (S) A parameter of type "const char *" cannot be initialized with an expression of type "unsigned char [1024]".

论坛徽章:
1
天蝎座
日期:2013-08-25 10:27:22
2 [报告]
发表于 2009-02-16 19:34 |只看该作者
。。。。。。

宏啊。。还以为是原始某种sql原语混写的呢。

[ 本帖最后由 yangsf5 于 2009-2-17 08:59 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2009-02-16 22:11 |只看该作者
LZ能否贴下代码呢?就一个 s7.c 就好。

论坛徽章:
3
数据库技术版块每日发帖之星
日期:2016-05-27 06:20:00数据库技术版块每日发帖之星
日期:2016-06-04 06:20:00数据库技术版块每日发帖之星
日期:2016-06-23 06:20:00
4 [报告]
发表于 2009-02-17 08:42 |只看该作者
s7.cpp代码如下:

#include <stdio.h>
#include <sqlca.h>
#include <stdlib.h>
#include <sqlda.h>
#include <sqlcpr.h>
#include <strings.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#define USERNAME "test"
#define PASSWORD "test"
#include <oraca.h>

EXEC ORACLE OPTION (ORACA=YES);
EXEC SQL BEGIN DECLARE SECTION;
        char *username = USERNAME;
        char *password = PASSWORD;
        varchar dynstmt[1024];
        int empno = 1234;
        int deptno1 = 97;
        int deptno2 = 99;
EXEC SQL END DECLARE SECTION;


main()
{
        EXEC SQL CONNECT :username IDENTIFIED BY :password;
        puts("\nConnected to Oracle.\n");
        strcpy(dynstmt.arr,"INSERT INTO tp_hxl_emp (EMPNO, DEPTNO) VALUES (:v1, :v2)");
        dynstmt.len = strlen(dynstmt.arr);
        puts((char *) dynstmt.arr);
        printf(" v1 = %d, v2 = %d\n", empno, deptno1);
        EXEC SQL PREPARE S FROM :dynstmt;
        EXEC SQL EXECUTE S USING :empno, :deptno1;
        empno++;
        printf(" v1 = %d, v2 = %d\n", empno, deptno2);
        EXEC SQL EXECUTE S USING :empno, :deptno2;
       
        strcpy(dynstmt.arr, "DELETE FROM tp_emp WHERE DEPTNO = :v1 OR DEPTNO = :v2");
        dynstmt.len = strlen(dynstmt.arr);
        puts((char *) dynstmt.arr);
        printf(" v1 = %d, v2 = %d\n", deptno1, deptno2);
        EXEC SQL PREPARE S FROM :dynstmt;
        EXEC SQL EXECUTE S USING :deptno1, :deptno2;
        EXEC SQL COMMIT RELEASE;
        puts("\nComplete!\n");
        exit(0);
}

论坛徽章:
3
数据库技术版块每日发帖之星
日期:2016-05-27 06:20:00数据库技术版块每日发帖之星
日期:2016-06-04 06:20:00数据库技术版块每日发帖之星
日期:2016-06-23 06:20:00
5 [报告]
发表于 2009-02-17 18:56 |只看该作者
怎么没有人知道吗?

论坛徽章:
0
6 [报告]
发表于 2009-02-17 19:14 |只看该作者
为了编译这个程序 proc 的参数似乎要设置成 MODE=ORACLE才行

论坛徽章:
3
数据库技术版块每日发帖之星
日期:2016-05-27 06:20:00数据库技术版块每日发帖之星
日期:2016-06-04 06:20:00数据库技术版块每日发帖之星
日期:2016-06-23 06:20:00
7 [报告]
发表于 2009-02-17 19:22 |只看该作者
加了mode=oracle参数后,问题依旧啊
proc code=cpp iname=s7.cpp mode=oracle
sqlcheck=semantics userid=test/test@dwdb


cc -+ -o s7 -qcpluscmt -I. \
-I${ORACLE_HOME}/precomp/public  \
-I${ORACLE_HOME}/rdbms/public \
-I${ORACLE_HOME}/rdbms/demo \
-I${ORACLE_HOME}/plsql/public \
-I${ORACLE_HOME}/network/public \
-L${ORACLE_HOME}/lib32 -lclntsh `cat ${ORACLE_HOME}/lib32/sysliblist`  -lm  -lpthread \
s7.c

论坛徽章:
0
8 [报告]
发表于 2009-02-17 22:15 |只看该作者

回复 #4 hxl 的帖子

没行号,最好能用 【code】 包含一下,格式会好些。

cc -+ -o s7 -qcpluscmt -I. \
-I${ORACLE_HOME}/precomp/public  \
-I${ORACLE_HOME}/rdbms/public \
-I${ORACLE_HOME}/rdbms/demo \
-I${ORACLE_HOME}/plsql/public \
-I${ORACLE_HOME}/network/public \
-L${ORACLE_HOME}/lib32 -lclntsh `cat ${ORACLE_HOME}/lib32/sysliblist`  -lm  -lpthread \
s7.c

这句的报错整体贴一下吧还是, 你那 -+ 让我看的好晕啊,呵呵

论坛徽章:
3
数据库技术版块每日发帖之星
日期:2016-05-27 06:20:00数据库技术版块每日发帖之星
日期:2016-06-04 06:20:00数据库技术版块每日发帖之星
日期:2016-06-23 06:20:00
9 [报告]
发表于 2009-02-18 08:42 |只看该作者
执行语句:
cc -+ -o s7 -qcpluscmt -I. \
-I${ORACLE_HOME}/precomp/public  \
-I${ORACLE_HOME}/rdbms/public \
-I${ORACLE_HOME}/rdbms/demo \
-I${ORACLE_HOME}/plsql/public \
-I${ORACLE_HOME}/network/public \
-L${ORACLE_HOME}/lib32 -lclntsh `cat ${ORACLE_HOME}/lib32/sysliblist`  -lm  -lpthread \
s7.c

报错信息:
"s7.c", line 233.23: 1540-0256 (S) A parameter of type "char *" cannot be initialized with an expression of type "unsigned char [1024]".
"s7.c", line 233.23: 1540-1205 (I) The error occurred while converting to parameter 1 of "strcpy(char *, const char *)".
"s7.c", line 234.37: 1540-0256 (S) A parameter of type "const char *" cannot be initialized with an expression of type "unsigned char [1024]".
"s7.c", line 234.37: 1540-1205 (I) The error occurred while converting to parameter 1 of "strlen(const char *)".
"s7.c", line 367.23: 1540-0256 (S) A parameter of type "char *" cannot be initialized with an expression of type "unsigned char [1024]".
"s7.c", line 367.23: 1540-1205 (I) The error occurred while converting to parameter 1 of "strcpy(char *, const char *)".
"s7.c", line 368.37: 1540-0256 (S) A parameter of type "const char *" cannot be initialized with an expression of type "unsigned char [1024]".
"s7.c", line 368.37: 1540-1205 (I) The error occurred while converting to parameter 1 of "strlen(const char *)".

论坛徽章:
3
数据库技术版块每日发帖之星
日期:2016-05-27 06:20:00数据库技术版块每日发帖之星
日期:2016-06-04 06:20:00数据库技术版块每日发帖之星
日期:2016-06-23 06:20:00
10 [报告]
发表于 2009-02-18 09:23 |只看该作者
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 */
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP