免费注册 查看新帖 |

Chinaunix

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

请教一个pro*c问题,怎样在一个线程中连接两个数据库 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-10-13 22:02 |只看该作者 |倒序浏览
建立两个连接是这样的:
    EXEC SQL DECLARE link1 DATABASE;
      EXEC SQL DECLARE link2 DATABASE;
      EXEC SQL CONNECT :usrname1 IDENTIFIED BY :passwd1 AT link1 USING :db1;
      EXEC SQL CONNECT :usrname2 IDENTIFIED BY :passwd2 AT link2 USING :db2;

请问我后面sql语句该怎么指定一个数据库连接呢?
找了半天资料也没找到,哪位大侠知道,帮帮忙。

论坛徽章:
0
2 [报告]
发表于 2005-10-14 09:10 |只看该作者

请教一个pro*c问题,怎样在一个线程中连接两个数据库

顶顶

论坛徽章:
0
3 [报告]
发表于 2005-10-14 09:15 |只看该作者

请教一个pro*c问题,怎样在一个线程中连接两个数据库

参考下面:
  注意 sql_context  用法



  1. int TDb_Connect_Ora::DbConnect(char * dbname,char * username,char * password)
  2. {
  3. EXEC SQL BEGIN DECLARE SECTION;
  4.   char * pusername=username;
  5.   char * ppassword=password;
  6.   sql_context dbarea;
  7.   struct sqlca sqlca;
  8.   char   connect_str[200];
  9. EXEC SQL END DECLARE SECTION;

  10.   printf("dbconnect %s %s\n",dbname,username);
  11.   sqlca.sqlcode=0;
  12.   EXEC SQL ENABLE THREADS;
  13.   EXEC SQL CONTEXT ALLOCATE :dbarea;
  14.   if(sqlca.sqlcode!=0)
  15.   {
  16.     printf("dbconnect %s %s fail\n",dbname,username);
  17.     printf("connect to database error : sqlcode is %d u: %s p: %s\n",sqlca.sqlcode,pusername,ppassword);
  18.     return 0;
  19.   };

  20.   EXEC SQL CONTEXT USE :dbarea;
  21.   if(sqlca.sqlcode!=0)
  22.   {
  23.     printf("dbconnect %s %s fail\n",dbname,username);
  24.     printf("connect to database error : sqlcode is %d u: %s p: %s\n",sqlca.sqlcode,pusername,ppassword);
  25.     return 0;
  26.   };

  27.   strcpy(mUserName,username);
  28.   strcpy(mPassWord,password);
  29.   strcpy(mDbName,dbname);

  30.   if(password[0]!=0)
  31.     sprintf(connect_str,"%s/%s",pusername,ppassword);
  32.   else
  33.     sprintf(connect_str,"%s",pusername);

  34.   EXEC SQL CONNECT :connect_str;
  35.   //EXEC SQL CONNECT :pusername IDENTIFIED BY :ppassword;
  36.   if(sqlca.sqlcode!=0)
  37.   {
  38.     printf("dbconnect %s %s fail\n",dbname,username);
  39.     printf("connect to database error : sqlcode is %d u: %s p: %s\n",sqlca.sqlcode,pusername,ppassword);
  40.     return 0;
  41.   };
  42.   mDbAreaList=dbarea;      
  43.   printf("dbconnect %s %s ok\n",dbname,username);
  44.   return 1;
  45. }

  46. void TDb_Connect_Ora::DbDisconnect()
  47. {
  48. EXEC SQL BEGIN DECLARE SECTION;
  49.   sql_context dbarea=mDbAreaList;
  50.   struct sqlca sqlca;
  51. EXEC SQL END DECLARE SECTION;

  52. EXEC SQL CONTEXT USE :dbarea;
  53.   DbExecuteSql(NULL,"commit");
  54.   EXEC SQL COMMIT WORK RELEASE;
  55.   EXEC SQL CONTEXT FREE :dbarea;
  56. }

复制代码

论坛徽章:
0
4 [报告]
发表于 2005-10-14 09:33 |只看该作者

请教一个pro*c问题,怎样在一个线程中连接两个数据库

谢谢mengwg的热心帮助。
可能是我没说清楚,多线程多个连接我是没问题的。
我是想在一个线程里连两个不同的数据库,从数据库1中取出数据然后存入到数据库2中。

论坛徽章:
0
5 [报告]
发表于 2005-10-14 09:43 |只看该作者

请教一个pro*c问题,怎样在一个线程中连接两个数据库

可不可以先这样:EXEC SQL DATABASE db1;取数据;EXEC SQL CLOSE DATABASE; 然后再EXEC SQL DATABASE db2;存数据;EXEC SQL CLOSE DATABASE;

论坛徽章:
0
6 [报告]
发表于 2005-10-14 09:47 |只看该作者

请教一个pro*c问题,怎样在一个线程中连接两个数据库

to:酷酷长大了
不行的,因为db1中是一批数据,数据量非常大,我要用游标取出一条到db2中做对应的动作,然后再取下一条。

论坛徽章:
0
7 [报告]
发表于 2005-10-14 10:26 |只看该作者

请教一个pro*c问题,怎样在一个线程中连接两个数据库

原帖由 "pinyin" 发表:
谢谢mengwg的热心帮助。
可能是我没说清楚,多线程多个连接我是没问题的。
我是想在一个线程里连两个不同的数据库,从数据库1中取出数据然后存入到数据库2中。


1\ 可以试试工作区切换.
2\ 做dblink最简单,用一个数据库操作.

论坛徽章:
0
8 [报告]
发表于 2005-10-14 11:08 |只看该作者

请教一个pro*c问题,怎样在一个线程中连接两个数据库

谢谢,已解决了
这样使用sql就行了:
EXEC SQL AT link1 select count(1) into:count1 from tbtest;
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP