使用 Proc 代码连接到两个不同的数据库

Connecting to two diffrent data bases using Pro* C code

我们如何使用 Pro* C 代码连接到两个不同的数据库。我在 tnsnames.ora 文件中有条目。默认情况下,它使用 EXEC SQL CONNECT 语句连接到其中一个数据库,我不确定它是如何连接的。我想连接到另一个在 tnsnames.ora 文件中有条目的数据库。我正在使用 OpenVMS OS.

维杰·库马尔

下面概述了我在通行证中为实现这一目标所做的工作。

默认连接

如果您的代码中没有 CONNECT 语句,Oracle 将在遇到第一个 SQL 语句时执行自动连接。它使用设置数据库的人配置的凭据信息。

多个连接

要连接到 Pro C 中的多个数据库,您必须显式连接到代码引用的所有数据库。

下面概述了我在通行证中完成的 3 个步骤:

  • 声明一个数据库别名。这将用于参考 连接。
  • 显式连接到数据库并为连接分配别名。这是通过在 CONNECT 语句中包含一个 AT 子句来完成的。
  • 在接下来的 SQL 语句中,通过包含 AT 子句来引用连接。

示例代码:

/*
 * Declare the database aliases
 */ 
EXEC SQL DECLARE DB1 DATABASE;
EXEC SQL DECLARE DB2 DATABASE;


/*
 * Explicitly connect to the database.  Include an AT clause to name the connection
 */ 
EXEC SQL CONNECT :db1_uid IDENTIFIED BY :db1_pwd
         AT DB1;
EXEC SQL CONNECT :db2_uid IDENTIFIED BY :db2_pwd
         AT DB2;


/*
 * In the SQL statements, reference the connection by including the AT clause.
 */ 
EXEC SQL AT DB1 SELECT COL1 INTO :var1
         FROM TABLE_1
         WHERE COL2 = 'some_value';

EXEC SQL AT DB2 SELECT COLUMN1 INTO :var2
         FROM TABLE_2
         WHERE COLUMN2 = 'some_value';

EXEC SQL AT DB1 COMMIT WORK RELEASE;
EXEC SQL AT DB2 COMMIT WORK RELEASE;

注意事项:

  • DB1 和 DB2 是程序员定义的别名。

  • 由变量 db1_pwd 和 db2_pwd 表示的密码必须是 变量而不是硬编码值。

  • 存储在变量 db1_uid 和 db1_uid2 中的用户名值采用以下格式:username@DatabaseName

注意我相信还有其他方法可以完成此操作。这就是我成功上班的方法。

您可以在 Oracle Pro *C/C++ Programmer’s Guide.

中找到有关连接到数据库的更多信息