Oracle Connection URL
にデフォルトのデータベーススキーマを設定したい
jdbc:Oracle:thin:@<server>:<port1521>:<sid>
私のサンプルSQLステートメント:
select monkey_name from animals.monkey
スキーマプレフィックスanimals.
なしでデータベースをクエリする必要があります。つまり、このステートメントを実行するとき
select monkey_name from monkey
デフォルトではanimals
スキーマを使用します。
上記の接続URLでこのような効果を得るには何を指定する必要がありますか?
ありがとう。
接続URLには何も挿入できません。
Oracleでは、各ユーザーが独自のスキーマを持ち(オブジェクトが含まれていなくても)、それがデフォルトのスキーマです。ログイン/接続したら、デフォルトのスキーマを変更できます
ALTER SESSION SET CURRENT_SCHEMA=animals
したがって、接続後に追加のステートメントを実行する必要があります。ユーザーおよび/またはデータベースにログオントリガーを設定して、ログイン時にこれを実行することができます。アプリケーションが接続するとき、私は個人的に明示的なステートメントを好みます。
C3PO を使用すると、接続をチェックアウトするときに実行させることができます。
プロパティとして:
c3p0.preferredTestQuery=alter session set current_schema=animals
c3p0.testConnectionOnCheckout=true
As Java code:
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"));
同義語の使用はどうですか?
create synonym monkey for animals.monkey;
select monkey_name from monkey
接続DBユーザーを使用してトリガーを作成し、現在のスキーマを変更できます。
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;