#c #oracle
#c #Oracle
Вопрос:
У меня есть две базы данных Oracle на одном сервере разработки.
Когда я это делаю SELECT ORA_DATABASE_NAME FROM DUAL;
, я получаю
БАЗА ДАННЫХ 1.SERVER в качестве имени для первого и DATABASE2.SERVER в качестве имени для второго.
Когда я использую EXEC SQL CONNECT :userid IDENTIFIED BY :pwd;
в своей программе Pro * C, по умолчанию автоматически устанавливается значение DATABASE1.
Я могу явно подключиться к DATABASE2 с помощью use EXEC SQL CONNECT :userid IDENTIFIED BY :pwd AT DB_NAME USING :dbname;
, однако, если я подключусь таким образом, мне нужно будет изменить каждое место, которое я использую EXEC SQL
, на EXEC SQL AT DB_NAME
протяжении всего кода. Это невозможно, поскольку существуют сотни устаревших файлов Pro * C, которые необходимо изменить.
Мой текущий тестовый код выглядит следующим образом:
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <pwd.h>
EXEC SQL INCLUDE sqlca;
void main()
{
EXEC SQL DECLARE DB_NAME DATABASE;
char *userid = "user1";
char *pwd = "password1";
char *dbname = "DATABASE2";
int c;
/* EXEC SQL CONNECT :userid IDENTIFIED BY :pwd AT DB_NAME USING :dbname;*/ // When I execute this line, I connect to DATABASE2 as desired
EXEC SQL CONNECT :userid IDENTIFIED BY :pwd; //when I execute this line, I connect to the default database, DATABASE1, which is not desired
printf("Database returned: %in",sqlca.sqlcode);
//This SQL is what I have to use when connecting to DATABASE2 explicitly
/* EXEC SQL AT DB_NAME select count(*)
into c
from table1;
*/
//This SQL is the code I need to use, by connecting to DATABASE2 as the default database
EXEC SQL select count(*)
into c
from table1;
printf("count: %in",c);
}
Я просмотрел документацию Oracle, пытаясь выяснить, как изменить подключение к базе данных по умолчанию, но все, что я нашел, это это, в котором указано только, что существует соединение по умолчанию, а не как его изменить.
Комментарии:
1. Я не эксперт в области Pro * C, но я ожидаю, что значение по умолчанию будет определяться
ORACLE_SID
переменной среды при запуске программы.2. Вот и все! Большое вам спасибо. Если вы хотите записать это как ответ, я пометлю его как принятый.
Ответ №1:
Я не Pro*C
эксперт. Но я бы ожидал, что это будет зависеть от ORACLE_SID
переменной среды при выполнении программы.