Oracleデータベース・アプリケーションがあります。表、PL/SQLパッケージ、およびJavaクラスが含まれます。これらのオブジェクトは同じスキーマにインストールする必要がありますが、スキーマの実際の名前は固定されていません。 Javaからテーブルの1つに対してクエリを実行したいとしましょう。Oracleデータベースに格納されているJavaクラスのスキーマを取得する方法
アプリケーションは、スキーマ所有者以外のユーザーによって呼び出すことができるため、インストールスキーマはセッションのデフォルトスキーマではありません。したがって、テーブル名の前にインストールスキーマを付ける必要があります。 「このクラスはどのスキーマにインストールされていますか?」という質問に対する答えを得る方法はありますか?クラスのメソッドから?
オブジェクトの数が多く、それらのほとんどがアプリケーションに対してプライベートであるため、すべてのアプリケーションユーザー(またはパブリックユーザー)のスキーマに同義語を作成することは選択できません。
私は、次のその場しのぎが出ている:インストールスクリプトの一環として、私は次のコマンドを持っている :
create or replace java resource named "inst.properties" using clob
select to_clob('InstSchema='||sys_context('userenv','current_schema')) from dual;
/
私は、その後に、このリソースをロードするために与えられたクラスのクラスローダを使用することができますProperties
オブジェクトを作成し、それを使用してインストール時に使用されたスキーマを取得します。これは無効にされる可能性があるため、クルージングです。誰かがスキーマをエクスポートし、プロパティーファイルを更新せずに新しい名前でインポートすることができます。
上記のkludgeは、クラスに関連付けられたクラスローダがそのクラスのスキーマで最初に検索され、そのスキーマ内のリソースを取得するため機能します。クラスローダーはこれを行うことができるので、クラスのスキーマを知る方法が必要です。そのような方法があれば、その情報を得ることが可能でなければなりません。問題はどういうことか。
あなたはそれについて何をしましたか?あなたの研究は何ですか?あなたの試練は何ですか? – pilkington
ログイン・トリガーを使用して[エンド・ユーザーの 'current_schema'をアプリケーション・スキーマに設定する]と考えましたか(https://asktom.oracle.com/pls/apex/f?p = 100:11:0 ::: :P11_QUESTION_ID:6265422366927)? –
これは多くの異なるアプリケーションを持つデータベースです。 'current_schema'の変更は受け入れられません。 –