Подтвердить что ты не робот

Схема по умолчанию в URL-адресе Oracle

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

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

Мой пример SQL-запроса:

select monkey_name from animals.monkey

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

select monkey_name from monkey

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

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

Спасибо.

4b9b3361

Ответ 1

Вы не можете поместить что-либо в URL-адрес соединения.

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

ALTER SESSION SET CURRENT_SCHEMA=animals

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

Ответ 2

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

create synonym monkey for animals.monkey;

select monkey_name from monkey

Ответ 3

Если вы используете 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"));