免费注册 查看新帖 |

Chinaunix

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

pro*c编程,出现错误2134代表什么啊 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-21 16:31 |只看该作者 |倒序浏览
我用pro*c进行多线程开发,原来一个线程操作数据库时没有问题,后来根据加了上下文,不知为什么出2134的错误,oerr ora 2134什么也没有显示,怎么回事呢

论坛徽章:
0
2 [报告]
发表于 2006-08-21 17:12 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2006-08-22 10:13 |只看该作者
我的代码如下:
context_db我定义了一个全局变量,用于deal_db_thread()第一个线程操作数据库的上下文,然后我将这个上下文传递给该线程内部下边所有操作数据库的函数(其实我认为不必要设为全局变量,但是如果不是全局变量,就更出错),执行完后执行free上下文,另一个线程的操作还没有做,执行的时候连接数据库没有错,但是执行update_traff函数,调用存储过程出错(该存储过程在没有用上下文时测试没有问题)

  1. sql_context context_db;

  2. main()
  3. {
  4.         if (pthread_create(&db_deal,NULL,deal_db_thread,NULL))
  5.            {
  6.                    write_log("main","not enough system resources to create a process  and exit\n");   
  7.                       exit(1);
  8.           }  
  9.           if (pthread_create(&cs_2m,NULL,cs_thread,(void *)&arg))
  10.            {
  11.                            write_log("main","not enough system resources to create a process  and exit\n");   
  12.                               exit(1);
  13.            }  
  14. }


  15. void * deal_db_thread(void * arg)
  16. {
  17.         char code[20];
  18.         int flag=1;
  19.         char time_str[20];
  20.        
  21.         code="derfgu";
  22.         time_str="ybuihuimk";
  23.        
  24.         db_start(context_db);
  25.        
  26.         update_traff(code,flag,time_str,context_db);
  27.                 db_end(context_db);

  28. }

  29. int db_start(sql_context context)
  30. {
  31.             struct sqlca sqlca;                /* 需要在此定义一个局部的sqlca */
  32.                
  33.         /* 以下SQL语句的执行顺序不能更改 */
  34.         EXEC SQL ENABLE THREADS;
  35.         EXEC SQL CONTEXT ALLOCATE :context;
  36.         EXEC SQL CONTEXT USE :context;
  37.                        
  38.             if  (init_db(context)!=0)
  39.             {
  40.                     db_end(context);
  41.                     exit(0);
  42.             }
  43.             return 0;
  44. }

  45. int db_end(sql_context context)
  46. {
  47.             EXEC SQL COMMIT WORK RELEASE;
  48.             if( sqlca.sqlcode < 0 )
  49.             {
  50.                     write_log("db","断开数据库连接失败!%d:%s\n", sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc );
  51.                     return -1;
  52.             }
  53.         EXEC SQL CONTEXT FREE :context;
  54.         return 0;
  55. }


  56. int init_db(sql_context context)
  57. {
  58.         EXEC  SQL  BEGIN  DECLARE     SECTION;
  59.                      VARCHAR    username[20];
  60.                      VARCHAR    password[20];
  61.                      VARCHAR    db_name[20];
  62.             EXEC  SQL  END  DECLARE   SECTION;
  63.    
  64.            struct sqlca sqlca;
  65.         EXEC SQL CONTEXT USE :context;
  66.        
  67.            strcpy((char *)username.arr,"test");
  68.            username.len=strlen((char *)username.arr);
  69.            strcpy((char  *)password.arr,"test");
  70.            password.len=strlen((char *)password.arr);
  71.            strcpy((char *)db_name.arr,"test");       
  72.            db_name.len=strlen((char *)db_name.arr);
  73.       
  74.            EXEC SQL  CONNECT :username  IDENTIFIED  BY :password USING :db_name;
  75.            write_log("db","sqlca.sqlcode=%d",sqlca.sqlcode);       
  76.         return sqlca.sqlcode;           
  77. }

  78. void update_traff(char * code,int flag,char * time_str,sql_context context)
  79. {
  80.         EXEC  SQL  BEGIN  DECLARE     SECTION;                    
  81.                      char    up_str[20],code1[20];
  82.                      int         flag1;                    
  83.             EXEC  SQL  END  DECLARE   SECTION;   
  84.            
  85.             struct sqlca sqlca;
  86.         EXEC SQL CONTEXT USE :context;
  87.                
  88.             memset(up_str,0,sizeof(up_time_str));
  89.             memset(code1,0,sizeof(code1));
  90.             memcpy(up_str,time_str,sizeof(up_str));           
  91.             memcpy(code1,code,sizeof(code));
  92.             flag1=flag;
  93.            
  94.            
  95.            
  96.             EXEC SQL CALL UPDATE_TRAFF(:code1,:flag1,:up_str);           
  97.             write_log("db","sqlca.sqlcode=%d",sqlca.sqlcode);       
  98.             return ;        
  99. }
复制代码


请大家帮忙看看,为什么会出2134这个错误呢

论坛徽章:
0
4 [报告]
发表于 2006-08-23 18:30 |只看该作者
原帖由 happytgrape 于 2006-8-22 10:13 发表
我的代码如下:
context_db我定义了一个全局变量,用于deal_db_thread()第一个线程操作数据库的上下文,然后我将这个上下文传递给该线程内部下边所有操作数据库的函数(其实我认为不必要设为全局变量,但是如果 ...



你全局上下文定义的是context_db,怎么下边使用的时候全是context呀

论坛徽章:
0
5 [报告]
发表于 2006-08-24 08:50 |只看该作者
context_db用形参传过去了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP