Oracle包具有常量变量.我们如何根据客户改变它

Jap*_*ans 0 oracle package

我有一个包含两个变量的包,它们具有如下常量值.

person_name              CONSTANT VARCHAR2 (15)           := 'Adam';
person_city              CONSTANT VARCHAR2 (15)           := 'Houston';
Run Code Online (Sandbox Code Playgroud)

这个包变量在我的数据库中用于存储过程,其他包等.

现在我希望这些变量具有基于正在调用的客户端服务器的值.我把所有这些都保存在如下表格中

Server      Parameter       Value
Server1     person_name     Adam
Server1     person_city     Houston
Server2     person_name     Victor
Server2     person_city     Dallas
Run Code Online (Sandbox Code Playgroud)

因此,当从server1引用/调用package/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);
Run Code Online (Sandbox Code Playgroud)

在函数中,我将查询表

select * from parameterstable where parameter = (function's input) and servername = ???? 
Run Code Online (Sandbox Code Playgroud)

我怎么知道这里的服务器名称?

任何帮助/提示将不胜感激.谢谢

Jus*_*ave 5

假设server1并且server2是连接到服务器的客户端计算机,

SYS_CONTEXT( 'USERENV', 'HOST' )
Run Code Online (Sandbox Code Playgroud)

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