我知道数据库引擎本身(经常)在另一台机器上,SQLPlus没有直接阅读 * 那些 * 环境变量的方法,但我遇到了一个棘手的情况,我只需要客户机本身运行的机器上的环境变量。
是否有办法将这些值从将在SQLPlus中运行的单个脚本中骗到SQLPlus客户机中?该脚本由单个开始/结束PL/SQL块组成,但如果我需要使用set/define/variable排序的SQLPlus指令,这也应该不是问题。
我不能做的是改变SQL*Plus可执行文件本身的启动方式(我无权将值作为参数传入)。
有什么办法可以做到这一点吗?
注意:dbms_system.get_env()
似乎从服务器本身检索环境变量,这是我不想要的。
4条答案
按热度按时间b1payxdu1#
您可以从
USERENV
上下文中获取一些与客户机相关的内容,但不能获取任意的环境变量。如果可以在本地计算机上创建文件,则可以使用the
host
command基于环境变量设置替代变量:不是很漂亮,但是如果你不能在命令行上传递变量作为位置参数,那么你的选择是相当有限的。
当然,这是使用Unix-y路径和命令,但是你可以在Windows中做同样的事情。
bnl4lu3b2#
Sys_context
应该可以解决你的问题。你可以使用DBMS_SESSION.SET_CONTEXT ('MY_NAMESPACE', 'MY_PARAMETER', v_input_parameter);
在数据库中设置自定义环境变量,然后使用SYS_CONTEXT ('MY_NAMESPACE', 'MY_PARAMETER');
获取它。所以你可以运行一个初始的pl/sql块来设置会话中的变量,然后根据需要使用它。您可以在这里看到一个示例:http://blog.contractoracle.com/2010/03/using-dbmssessionsetcontext-to-store.html
jyztefdp3#
如果可以通过SQLPLUS参数传递机制传递变量,则可以执行以下操作,
7gyucuyw4#
这可以通过使用空SQL脚本来完成。
脚本'getvar.sql'只需是一个空文件。
当使用“getvar.sql”调用sqlplus时,命令行中其后的所有内容都存储到指定的替换变量中;&1,&2等