PRO*C程序连接池问题 什么版本??9i以后,Pro*C才支持连接池 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 建议搂主看看pro*C多线程开发的部分,多线程是为了提高速度但是如果每个线程都连接就没意义了!因为连接操作很费时!我用多线程的时候都用一两个连接(实际上2个连接九足够了,Pro*C一般sql的执行速度很快,除非大数据量操作)互斥访问 使用连接池之需要设置预编译参数就行了!CPOOL=YES CMAX=10 CMIN=1等等,具体产看文档吧至于程序的写法根非连接池的多线程写法一样 就是使用了 CPOOL=YES CMAX=10 CMIN=1 才导致连接的时候报错:24392而且按照书上说的连接池可以减少连接数(速度方面没有太大的影响),我觉得连接池是能达到这个目的的, 多线程的写法正确吗?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 :CONNINFOAT :params[i].connName USING :params[i].dbName;} oracle\ora92\precomp\demo\proc\cpdemo1oracle\ora92\precomp\demo\proc\cpdemo2看看oracle的例子 还是没有搞定,代码如下,帮忙看看了#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;} 2个select放进另一个select中能否实现 关于闪回 oracle表如何判断某条记录是否存在? oracle 自带sqlplus worksheet中文显示乱码,客户端字符集与服务器端一致 怎么查出一个物化视图的所有用户? oracle的字符串连接问题,急!急!急! 有关sqlplus的问题,谢谢 请求 高手帮助 Oracle启不来了。 UPDATE并发问题,求高手帮忙看看 关于oracle登录的问题!!~~ 如何执行变量中组成的sql语句并且返回值! 在PL/SQL中,在执行动态SQL中,什么时候要用到EXECUTE IMMEDIATE,谢谢
至于程序的写法根非连接池的多线程写法一样
而且按照书上说的连接池可以减少连接数(速度方面没有太大的影响),我觉得连接池是能达到这个目的的,
{
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;
}
oracle\ora92\precomp\demo\proc\cpdemo2看看oracle的例子
#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;
}