J'aimerais définir le schéma de base de données par défaut dans Oracle Connection URL
jdbc:Oracle:thin:@<server>:<port1521>:<sid>
Mon exemple d'instruction SQL:
select monkey_name from animals.monkey
J'ai besoin d'interroger la base de données sans le préfixe de schéma animals.
c'est-à-dire quand j'exécute cette instruction
select monkey_name from monkey
il utilisera le schéma animals
par défaut.
Que dois-je spécifier dans l'URL de connexion ci-dessus pour obtenir un tel effet?
Merci.
Vous ne pouvez rien mettre dans l'URL de connexion.
Dans Oracle, chaque utilisateur a son propre schéma (même s'il ne contient aucun objet) et correspond à son schéma par défaut. Une fois connectés/connectés, ils peuvent changer leur schéma par défaut avec un
ALTER SESSION SET CURRENT_SCHEMA=animals
Il est donc possible d’avoir un déclencheur de connexion sur l’utilisateur et/ou la base de données qui l’exécutera lorsqu’ils se connecteront. l'application se connecte.
Si vous utilisez C3PO vous pouvez le faire quand il vérifie la connexion.
En tant que propriétés:
c3p0.preferredTestQuery=alter session set current_schema=animals
c3p0.testConnectionOnCheckout=true
En code Java:
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setPreferredTestQuery("alter session set current_schema=animals");
dataSource.setTestConnectionOnCheckout(true);
L'inconvénient est que cela se produira chaque fois que la connexion est retirée du pool.
Si vous utilisez vous-même une connexion JDBC, vous pouvez simplement faire:
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"));
Qu'en est-il de l'utilisation de synonymes?
create synonym monkey for animals.monkey;
select monkey_name from monkey
Vous pouvez créer un déclencheur à l'aide de l'utilisateur de la base de données de connexion pour modifier le schéma actuel.
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;