免费注册 查看新帖 |

Chinaunix

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

Proc问题, 如何使用动态语句创建Cursor [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-09-27 17:26 |只看该作者 |倒序浏览
方案一没问题
方案二总提示ora-1001错。请高手看看问题出在哪里?


  1. #include <stdio.h>
  2. //test.pc
  3. EXEC SQL INCLUDE SQLCA;
  4. EXEC SQL INCLUDE SQLDA;

  5. int main(int argc, char* argv[])
  6. {       
  7.         EXEC SQL BEGIN DECLARE SECTION;
  8.         int cnt=0;
  9.         char username[20];
  10.         char password[20];
  11.         char *databasename = "GSM";
  12.         char v_tabname[30];
  13.         char sql[2000];
  14.         EXEC SQL END DECLARE SECTION;
  15.        
  16.        
  17.         strcpy(username,"SCOTT");
  18.         strcpy(password, "TIGER");
  19.         strcpy(sql, "select table_name from user_tables");
  20.         printf("sql=%s\n",sql);
  21.        
  22.         EXEC SQL PREPARE stmt FROM :sql;
  23.        
  24.         /*方案一*/
  25.                 EXEC SQL DECLARE C CURSOR  for select table_name from user_tables;
  26.         /*方案二*/
  27.                 EXEC SQL DECLARE C CURSOR  for stmt ;
  28.        
  29.         EXEC SQL CONNECT :username IDENTIFIED BY :password USING :databasename;
  30.         EXEC SQL SELECT count(*) into :cnt FROM dual;
  31.         printf("count of dual: %d\n", cnt);
  32.                
  33.         EXEC SQL OPEN C;
  34.         while(1)
  35.         {
  36.                 EXEC SQL FETCH C into :v_tabname;
  37.                 if(sqlca.sqlcode ){
  38.                         printf("sqlca.sqlcode=%d\n",sqlca.sqlcode);
  39.                         break;
  40.                 }
  41.                 /*
  42.                 if(sqlca.sqlcode < 0) {
  43.                         perror("fetching data error");
  44.                         EXEC SQL ROLLBACK WORK RELEASE;
  45.                         exit(sqlca.sqlcode);
  46.                 }
  47.                 */
  48.                 printf("Table_name: %s\n", v_tabname);
  49.                
  50.         }
  51.         EXEC SQL ROLLBACK WORK RELEASE;
  52. }
复制代码

论坛徽章:
0
2 [报告]
发表于 2006-10-11 10:27 |只看该作者
如果把方案二的语句,放在EXEC SQL OPEN C;之前,
是否有改善。

论坛徽章:
0
3 [报告]
发表于 2006-10-11 16:10 |只看该作者
--先连接数据库
--拼好SQL
sprintf(SqlStmt, "select BUSISN, SvcNum, KEYID, CustId, BUSITYPE,substr(KEYID,1,1) AreaID,deptid,to_char(optdate,'YYYYMMDD HH24:MI:SS') from BOSS.T_INTER_ASYBUSIINFO where RMKI='1' AND KEYID like '%s%%' order by optdate ",V_AreaID);
--OPEN CURSOR
EXEC SQL AT :bossDB DECLARE STA_AREASvcNum STATEMENT;
EXEC SQL  PREPARE STA_AREASvcNum FROM :SqlStmt;       
EXEC SQL  DECLARE C_AREASvcNum  CURSOR FOR STA_AREASvcNum;       
EXEC SQL  OPEN  C_AREASvcNum;
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP