web-dev-qa-db-ja.com

Oracle接続URLのデフォルトスキーマ

Oracle Connection URLにデフォルトのデータベーススキーマを設定したい

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

私のサンプルSQLステートメント:

select monkey_name from animals.monkey

スキーマプレフィックスanimals.なしでデータベースをクエリする必要があります。つまり、このステートメントを実行するとき

select monkey_name from monkey

デフォルトではanimalsスキーマを使用します。

上記の接続URLでこのような効果を得るには何を指定する必要がありますか?

ありがとう。

40
netic

接続URLには何も挿入できません。

Oracleでは、各ユーザーが独自のスキーマを持ち(オブジェクトが含まれていなくても)、それがデフォルトのスキーマです。ログイン/接続したら、デフォルトのスキーマを変更できます

ALTER SESSION SET CURRENT_SCHEMA=animals

したがって、接続後に追加のステートメントを実行する必要があります。ユーザーおよび/またはデータベースにログオントリガーを設定して、ログイン時にこれを実行することができます。アプリケーションが接続するとき、私は個人的に明示的なステートメントを好みます。

34
Gary Myers

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
12
Rene

接続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;
1
robothy