什么版本??9i以后,Pro*C才支持连接池

解决方案 »

  1.   

    建议搂主看看pro*C多线程开发的部分,多线程是为了提高速度但是如果每个线程都连接就没意义了!因为连接操作很费时!我用多线程的时候都用一两个连接(实际上2个连接九足够了,Pro*C一般sql的执行速度很快,除非大数据量操作)互斥访问
      

  2.   

    使用连接池之需要设置预编译参数就行了!CPOOL=YES CMAX=10 CMIN=1等等,具体产看文档吧
    至于程序的写法根非连接池的多线程写法一样
      

  3.   

    就是使用了 CPOOL=YES CMAX=10 CMIN=1 才导致连接的时候报错:24392
    而且按照书上说的连接池可以减少连接数(速度方面没有太大的影响),我觉得连接池是能达到这个目的的,
      

  4.   

    多线程的写法正确吗?for(i=0; i<THREADS; i++)
    {
    strcpy(params[i].dbName, "inst1");
    sprintf(params[i].connName,"conn%d", i);
    params[i].thread_id = i;
    /* logon to the data base */
    EXEC SQL CONTEXT ALLOCATE :params[i].ctx;
    EXEC SQL CONTEXT USE :params[i].ctx;
    EXEC SQL CONNECT :CONNINFO
    AT :params[i].connName USING :params[i].dbName;
    }
      

  5.   

    oracle\ora92\precomp\demo\proc\cpdemo1
    oracle\ora92\precomp\demo\proc\cpdemo2看看oracle的例子
      

  6.   

    还是没有搞定,代码如下,帮忙看看了
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <string.h>
    #include <search.h>
    #include <sys/types.h>
    #include <errno.h>
    #include <dirent.h>EXEC SQL INCLUDE SQLCA;
    EXEC SQL WHENEVER NOTFOUND CONTINUE;
    EXEC SQL WHENEVER SQLERROR CONTINUE;/**********************************************/
    void do_something1();
    /**********************************************/int main()
    {
    pthread_t th1,th2,th3,th4,th5;

    EXEC SQL ENABLE THREADS;

    pthread_create(&th1, NULL,do_something1 ,NULL);
    pthread_create(&th2, NULL,do_something1 ,NULL);
    pthread_create(&th3, NULL,do_something1 ,NULL);

    pthread_join(th1,NULL);
    pthread_join(th2,NULL);
    pthread_join(th3,NULL);
    }
    void do_something1()
    {
    sql_context cnt;
    char user[80]="123";
    char pwd[]="321";
    char c_msg[1024]="DUAL";

    /*连接*/
    EXEC SQL CONTEXT ALLOCATE :cnt;
    EXEC SQL CONTEXT USE :cnt;
    EXEC SQL CONNECT :user IDENTIFIED BY :pwd;
    if(sqlca.sqlcode!=0)
    {
    printf("connect error %d\n",sqlca.sqlcode);
    EXEC SQL CONTEXT FREE :cnt;
    return ;
    }

    EXEC SQL SELECT TO_CHAR(SYSDATE,'YYYYMMDDHH24miss') 
             INTO  :user
             FROM  dual;
    if(sqlca.sqlcode != 0)
    {
    printf("select error %d\n",sqlca.sqlcode);
    EXEC SQL CONTEXT FREE :cnt;
    return;
    }

    /*输入线程信息*/
    snprintf(c_msg, sizeof(c_msg), "%d_%s", pthread_self(), user);
    printf("msg:%s\n", c_msg);

    EXEC SQL CONTEXT FREE :cnt;

    getchar();
    return;
    }