
如何才能实现proc 执行动态的SQL.doc
5页 如何才能实现proc 执行动态的SQLPROC 动态SQL的有四种方式方式-:直接执行SQL语句,SQL语句中不带绑定的变量,而且SQL语句不是查询语句方式二:执行SQL语句,带绑定变量,不是查询语句方法三:执行SQL语句,带绑定变量,可以是查询语句,需要使用游标方法四:利用SQLDA结构体,实现动态字段,动态参数等,该方法最为灵活方法-:EXEC SQL EXECUTE IMMEDIATE CREATE TABLE test (test_col VARCHAR2(4)); 方法二:strcpy(sqlstring, "DELETE FROM test WHERE test_col = :?"); EXEC SQL divPARE sqlproc FROM :sqlstring; EXEC SQL EXECUTE sqlproc USING :emp_number; 方法三:if(strcmp(tsospa1.event_table,"TSOSP26")==0) { strcpy(sqlstr,"select count(*) as count from "); strcat(sqlstr,tsospa1.event_table); strcat(sqlstr," where PRICE_SYS=:price_sys"); strcat(sqlstr," and PERIOD_NUM=:period_num"); } else { strcpy(sqlstr,"select count(*) as count from "); strcat(sqlstr,tsospa1.event_table); strcat(sqlstr," where PROD_CODE=:prode_code"); strcat(sqlstr," and PRICE_SYS=:price_sys"); strcat(sqlstr," and PERIOD_NUM=:period_num"); } EDLog(1,1,"sqlstr=%s",sqlstr); EXEC SQL PREPARE S FROM :sqlstr; EXEC SQL DECLARE C CURSOR FOR S; if(strcmp(tsospa1.event_table,"TSOSP26")==0) { EXEC SQL OPEN C USING :tsospa1.price_sys,est_PERIOD_NUM; } /*else if(strcmp(tsospa1.event_table,"TSOSP25")==0) { EXEC SQL OPEN C USING :tsospa1.price_sys,dest_PERIOD_NUM; }*/ else { EXEC SQL OPEN C USING :tsospa1.prod_code,:tsospa1.price_sys,dest_PERIOD_NUM; } for (fetchRowCount=0;;) { EXEC SQL FETCH C INTO :count; if(sqlca.sqlcode==1403) break; fetchRowCount++; EDLog(1,1,"Do"); EDLog(1,1,"count=%d",max_version_num); }第四种:#include












