请问各位前辈高手,我要在while的循环中同时操作两台ORACLE数据库进行数据交换,现在想问能同时只一次打开两台数据库的链接就可以进行相关的操作吗?还是先打开一台,进行相关操作取得数据后关闭再打开另外一台进行数据交换?这样的话就要不断的打开链接、关闭链接……
下面是我使用的链接函数:
int
LDbConnect(const char * user, const char * pass, const char * dbname) {
EXEC SQL BEGIN DECLARE SECTION;
char username[20];
char password[20];
char db_name[20];
EXEC SQL END DECLARE SECTION;
/*Connect to database*/
strcpy(username, user);
strcpy(password, pass);
if(dbname) {
strcpy(db_name, dbname);
EXEC SQL CONNECT:username IDENTIFIED BY:password using :db_name;
}
else EXEC SQL CONNECT:username IDENTIFIED BY:password;
if(sqlca.sqlcode<0) {
sprintf(errorMessage, "error: %d %s", sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc);
return -1;
}
else {
sprintf(errorMessage, "connected to local database %s as %s ok", dbname, user);
return 0;
}
}不知道我说的清楚不?请指教,谢谢!!
下面是我使用的链接函数:
int
LDbConnect(const char * user, const char * pass, const char * dbname) {
EXEC SQL BEGIN DECLARE SECTION;
char username[20];
char password[20];
char db_name[20];
EXEC SQL END DECLARE SECTION;
/*Connect to database*/
strcpy(username, user);
strcpy(password, pass);
if(dbname) {
strcpy(db_name, dbname);
EXEC SQL CONNECT:username IDENTIFIED BY:password using :db_name;
}
else EXEC SQL CONNECT:username IDENTIFIED BY:password;
if(sqlca.sqlcode<0) {
sprintf(errorMessage, "error: %d %s", sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc);
return -1;
}
else {
sprintf(errorMessage, "connected to local database %s as %s ok", dbname, user);
return 0;
}
}不知道我说的清楚不?请指教,谢谢!!
char password[10] = "tiger";
char db_string1[20] = "NYNON1";
char db_string2[20] = "CHINON";
...
/* give each database connection a unique name */
EXEC SQL DECLARE DB_NAME1 DATABASE;
EXEC SQL DECLARE DB_NAME2 DATABASE;
/* connect to the two nondefault databases */
EXEC SQL CONNECT :username IDENTIFIED BY :password
AT DB_NAME1 USING :db_string1;
EXEC SQL CONNECT :username IDENTIFIED BY :password
AT DB_NAME2 USING :db_string2;这样就可以同时操作两个数据库了EXEC SQL CREATE DATABASE LINK db_link1
CONNECT TO username1 IDENTIFIED BY password1
USING ’NYNON’;
EXEC SQL CREATE DATABASE LINK db_link2
CONNECT TO username2 IDENTIFIED BY password2
USING ’CHINON’;
EXEC SQL CREATE SYNONYM emp FOR emp@db_link1;
EXEC SQL CREATE SYNONYM dept FOR dept@db_link2;
比如你有两个数据库test1和test2那么你可以这样连接:
char username[10] = "scott";
char password[10] = "tiger";
char db_string1[20] = "NYNON1";
char db_string2[20] = "CHINON";
EXEC SQL DECLARE test1 DATABASE;
EXEC SQL DECLARE test2 DATABASE;
EXEC SQL CONNECT :username IDENTIFIED BY :password
AT test1 USING :db_string1;
EXEC SQL CONNECT :username IDENTIFIED BY :password
AT test2 USING :db_string2;对他们操作的时候这样:
操作
EXEC SQL AT test1 select * from emp;
EXEC SQL AT test2 select * from emp;
快一年没用了不知道对不对,你自己试试看吧,不懂的地方可以看看oracle9的文档:
document for oracle9i\appdev.920\a97269.pdf
里面讲的比较详细,当初在unix下面用c编数据库的程序就是看的这里