2010-03-01 10 views
28

j'aimerais définir le schéma de base de données par défaut dans Oracle Connection URLschéma par défaut dans l'URL de connexion Oracle

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

Mon échantillon instruction SQL:

select monkey_name from animals.monkey 

Je dois base de données requête sans préfixe de schéma animals. à savoir quand Je cours cette déclaration

select monkey_name from monkey 

il utilisera animals schéma par défaut.

Que dois-je spécifier dans l'URL de connexion ci-dessus pour avoir un tel effet?

Merci.

Répondre

29

Vous ne pouvez rien ajouter dans l'URL de connexion.

Dans Oracle, chaque utilisateur a son propre schéma (même s'il ne contient aucun objet) et c'est leur schéma par défaut. Une fois connecté/connecté, ils peuvent changer leur schéma par défaut avec un

ALTER SESSION SET CURRENT_SCHEMA=animals 

Vous auriez besoin de faire la déclaration supplémentaire après la connexion. Il est possible d'avoir un déclencheur d'ouverture de session sur l'utilisateur et/ou la base de données qui l'exécutera lors de la connexion. Personnellement, je préfère une déclaration explicite lorsqu'une application se connecte.

+0

Cela ressemble à quelque chose que je peux travailler autour d'elle. Créer un déclencheur d'ouverture de session avec cette instruction pourrait être ma solution possible. Merci. – netic

+0

Je peux maintenant voir que cela devrait être une solution. En ayant ce déclencheur de connexion, je n'ai pas besoin de modifier mon SQL. Donc, toutes les déclarations génériques sont encore portables. – netic

9

Qu'en est-il de l'utilisation des synonymes?

create synonym monkey for animals.monkey; 

select monkey_name from monkey 
+0

C'est une bonne idée. Cependant, je trouve que ce n'est pas définitif, je ne suis pas sûr s'il y a des effets secondaires qui pourraient casser les choses le long du chemin. – netic

+4

+ Cette solution est assez couramment utilisée et fonctionne bien. –

+2

Il s'agit généralement du meilleur choix pour modifier la session, car il déplace le problème d'un aspect comportemental à un aspect structurel, ce qui est beaucoup plus robuste. – mwhs

9

Si vous utilisez C3PO vous pouvez le faire faire quand il vérifie la connexion à.

Comme propriétés:

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

code Java:

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

côté incliné est ce qui va se passer à chaque fois que la connexion est prise hors de la piscine.

Si vous utilisez un vous pouvez simplement faire une connexion JDBC vous:

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")); 
Questions connexes