Схема по умолчанию в URL-адресе соединения с Oracle - PullRequest
40 голосов
/ 01 марта 2010

Я хотел бы установить схему базы данных по умолчанию в Oracle Connection URL

jdbc:oracle:thin:@<server>:<port1521>:<sid>

Мой пример оператора SQL:

select monkey_name from animals.monkey

Мне нужно запросить базу данных без префикса схемы animals., т.е. когда я запускаю этот оператор

select monkey_name from monkey

по умолчанию будет использоваться схема animals.

Что мне нужно указать в URL соединения выше, чтобы получить такой эффект?

Спасибо.

Ответы [ 4 ]

34 голосов
/ 01 марта 2010

Вы не можете ничего добавить в URL соединения.

В Oracle у каждого пользователя есть собственная схема (даже если она не содержит объектов), и это является схемой по умолчанию. После входа / подключения они могут изменить свою схему по умолчанию с помощью

ALTER SESSION SET CURRENT_SCHEMA=animals

Так что вам нужно будет сделать дополнительный оператор после подключения. Можно иметь триггер входа в систему для пользователя и / или базы данных, который будет запускать его при входе в систему. Я лично предпочел бы явное утверждение при подключении приложения.

13 голосов
/ 08 января 2013

Если вы используете C3PO , вы можете сделать это при проверке соединения.

Как свойства:

c3p0.preferredTestQuery=alter session set current_schema=animals
c3p0.testConnectionOnCheckout=true

как код Java:

ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setPreferredTestQuery("alter session set current_schema=animals");
dataSource.setTestConnectionOnCheckout(true);

Недостатком является то, что это будет происходить каждый раз, когда соединение выходит из пула.

Если вы используете соединение JDBC самостоятельно, вы можете просто сделать:

Class.forName("oracle.jdbc.driver.OracleDriver");
Connection connection = getConnection("jdbc:oracle:thin:@//server:1521/instance",   "username", "password");
connection.createStatement().execute("alter session set current_schema=animals"));
11 голосов
/ 01 марта 2010

А как насчет использования синонимов?

create synonym monkey for animals.monkey;

select monkey_name from monkey
0 голосов
/ 22 мая 2018

Вы можете создать триггер, используя пользователя БД подключения для изменения текущей схемы.

create or replace trigger SET_SCHEMA_AFTER_LOGON
    after logon on database
begin
     execute immediate 'alter session set CURRENT_SCHEMA=animals';
end SET_SCHEMA_AFTER_LOGON;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...