SQL*Plus可以从机器上读取环境变量吗?

Joh*_*n O 8 oracle sqlplus environment-variables

我知道数据库引擎本身(经常)在另一台机器上并且SQL*Plus没有直接读取这些环境变量的方法,但是我处于一个棘手的情况,我只需要来自机器的环境变量客户端本身正在运行.

有没有办法在一个将在SQL*Plus中运行的单个脚本中将这些值欺骗到SQL*Plus客户端?该脚本由一个开始/结束PL/SQL块组成,但是如果我需要使用set/define/variable排序的SQL*Plus指令,这也不应该是一个问题.

我不能做的是改变SQL*Plus可执行文件本身的启动方式(我没有权限将值作为参数传递).

有没有办法实现这个目标?

注意:dbms_system.get_env()似乎从服务器本身检索环境变量,这是我不想要的.

Ale*_*ole 7

你可以从一些客户相关的东西USERENV情况下,但不是任意的环境变量.

如果可以在本地计算机上创建文件,则可以使用host命令根据环境变量设置替换变量:

SQL > host echo define homedir=$HOME > /tmp/gethome.sql

SQL > @/tmp/gethome.sql
SQL > host rm -f /tmp/gethome.sql

SQL > select '&homedir.' as home from dual;

HOME
------------
/home/apoole

1 row selected.
Run Code Online (Sandbox Code Playgroud)

不是很漂亮,但是如果你不能将命令行上的变量作为位置参数传递,那么你的选项相当有限.

当然,这是使用Unix-y路径和命令,但您可以在Windows中执行相同的操作.