0

我有一个包含两个变量的包,这些变量的值如下所示。

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

因此,当从 server1 引用/调用包/SP 时,我希望我的 person_name 和 person_city 被默认为 Adam 和 Houston。同样,当从 server2 引用/调用包/SP 时,我希望我的 person_name 和 person_city 是 Victor 和 Dallas。

如何才能做到这一点?无论如何在oracle方面,调用特定SP或使用包变量的客户端?我编写了一个函数来获取如下值。

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

假设server1server2是连接到您的服务器的客户端计算机,

SYS_CONTEXT( 'USERENV', 'HOST' )

应该返回客户端机器的名称。您可以在GetParamValue函数中使用它来确定要读取配置表中的哪一行。

于 2012-08-21T19:36:43.833 回答
0

首先,您应该告诉我们“服务器”是什么意思。一旦我们得到它 - 我们会尽力提供帮助。

在任何情况下,您都应该注意包变量在调用包时初始化一次,因此如果可能更改变量,您必须在包中刷新它们以不处理不正确的值。因此,您需要在每次使用它们时检索它们(例如在 sp 中),或者在设置表中添加更新/插入触发器,以便正确刷新包变量。

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

于 2012-08-21T19:33:07.883 回答
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 回答