Схема по умолчанию в 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-адресе соединения, получите такой эффект?
Спасибо.
Ответы
Ответ 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"));