0

以下のような定数値を持つ2つの変数を持つパッケージがあります。

person_name              CONSTANT VARCHAR2 (15)           := 'Adam';
person_city              CONSTANT VARCHAR2 (15)           := 'Houston';

このパッケージ変数は、データベース全体でストアド プロシージャや他のパッケージなどで使用されます。

これらの変数には、呼び出しているクライアント サーバーに基づいた値が必要です。そして、私はこれらすべてを以下のような表に維持しています

Server      Parameter       Value
Server1     person_name     Adam
Server1     person_city     Houston
Server2     person_name     Victor
Server2     person_city     Dallas

そのため、パッケージ/SP が server1 から参照/呼び出されたときに、person_name と person_city を Adam と Houston にデフォルト設定する必要があります。同様に、パッケージ/SP が server2 から参照/呼び出される場合、person_name と person_city を Victor と Dallas にします。

これはどのように行うことができますか?とにかく、特定のSPを呼び出しているか、パッケージ変数を使用しているクライアントは、Oracle側にありますか? 以下のような値を取得する関数を書きました。

in package, 
person_name     CONSTANT VARCHAR2 (15)      :=GETPARAMVALUE(person_name);
person_city     CONSTANT VARCHAR2 (15)      :=GETPARAMVALUE(person_city);

関数では、テーブルをクエリします

select * from parameterstable where parameter = (function's input) and servername = ???? 

ここでサーバー名を知るにはどうすればよいですか?

ヘルプ/ヒントをいただければ幸いです。ありがとう

4

3 に答える 3

5

とがサーバーに接続しているクライアント マシンであると仮定するserver1と、server2

SYS_CONTEXT( 'USERENV', 'HOST' )

クライアント マシンの名前を返す必要があります。これを関数で使用してGetParamValue、構成テーブルのどの行を読み取るかを決定できます。

于 2012-08-21T19:36:43.833 に答える
0

たぶん、このようなものはサーバー名を識別するのに役立つでしょう-

SQL> select a.host_name,b.value from v$instance a, parameterstable b
     where a.host_name = b.server and b.parameter='person_name';

HOST_NAME      VALUE
---------   -----------
server1        Adam
于 2012-08-21T20:37:33.920 に答える
0

まず、「サーバー」の意味を教えてください。それを手に入れたら、助けようとします。

いずれにせよ、パッケージ変数はパッケージが呼び出されたときに一度初期化されることに注意する必要があります。そのため、変数が変更される可能性がある場合は、誤った値を処理しないようにパッケージ内で変数を更新する必要があります。そのため、パッケージ変数を適切に更新するには、使用するたびにそれらを取得するか (たとえば sp で)、設定テーブルに更新/挿入のトリガーを追加する必要があります。

http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_sessio.htm

于 2012-08-21T19:33:07.883 に答える