2010-03-01 21 views
28

me gustaría establecer esquema de base de datos predeterminada en Oracle Connection URLEsquema predeterminado en Oracle URL de conexión

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

Mi declaración de ejemplo de SQL:

select monkey_name from animals.monkey 

necesito para consultar la base de datos sin prefijo esquema animals. es decir, cuando Ejecuto esta declaración

select monkey_name from monkey 

utilizará animals esquema de forma predeterminada.

¿Qué debo especificar en la URL de conexión anterior para obtener dicho efecto?

Gracias.

Respuesta

29

No puede poner nada en la URL de conexión.

En Oracle, cada usuario tiene su propio esquema (incluso si no contiene ningún objeto) y ese es su esquema predeterminado. Una vez registrados en/conectada, pueden cambiar su esquema predeterminado con un

ALTER SESSION SET CURRENT_SCHEMA=animals 

Así que había necesidad de hacer la declaración extra después de la conexión. Es posible tener un disparador de inicio de sesión en el usuario y/o la base de datos que ejecutará esto cuando inicien sesión. Yo personalmente preferiría una declaración explícita cuando se conecta una aplicación.

+0

Esto se ve como algo que pueda trabajar a su alrededor. Crear inicio de sesión con esta declaración podría ser mi posible solución. Gracias. – netic

+0

Ahora puedo ver que esta debería ser una solución. Al hacer que este inicio de sesión se dispare, no tengo que modificar mi sql. Entonces todas las declaraciones genéricas son aún portátiles. – netic

9

¿Qué pasa con el uso de sinónimos?

create synonym monkey for animals.monkey; 

select monkey_name from monkey 
+0

Es una buena idea. Sin embargo, creo que no es definitivo, no estoy seguro de si hay algún efecto secundario que pueda romper las cosas en el camino. – netic

+4

+ Esta solución se usa con bastante frecuencia y funciona bien. –

+2

Esta suele ser la opción mucho mejor que la alteración de la sesión, ya que traslada el problema de un aspecto conductual a uno estructural, que es mucho más robusto. – mwhs

9

Si utiliza C3PO puede hacer que haga que cuando se comprueba la conexión a cabo.

Como propiedades:

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

Como código Java:

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

desventaja es que esto sucederá cada vez que la conexión se saca de la piscina.

Si está utilizando una conexión JDBC a sí mismo que podía hacerlo solo:

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")); 
Cuestiones relacionadas