oracle - SQL * Plus可以从运行它的机器上读取环境变量吗?

标签 oracle environment-variables sqlplus

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

有没有办法从将在SQL * Plus中运行的单个脚本中将这些值欺骗到SQL * Plus客户端中?该脚本包含一个单独的begin / end PL / SQL块,但是如果我需要使用set / define / variable排序的SQL * Plus指令,也应该不是问题。

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

有什么办法可以做到这一点?

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

最佳答案

您可以从the USERENV context中获得一些与客户端相关的内容,但不能获得任意环境变量。

如果可以在本地计算机上创建文件,则可以使用the host command基于环境变量设置替换变量:

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.


不是很漂亮,但是如果您不能在命令行上将变量作为位置参数传递,那么您的选择就会受到限制。

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

关于oracle - SQL * Plus可以从运行它的机器上读取环境变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30107510/

相关文章:

java - 无法运行 shell 脚本从 Java 启动 SQL*Plus

java - 与事务相关的 View 中语句的可见性?

oracle - 如何将数字列表传递给存储过程?

c# - 分布式应用程序,密码哈希

sql - 选择从查询中检索列名的列

jenkins - 有没有办法将当前的 BUILD_NUMBER 从 Jenkins 构建传递到 Gradle 守护进程?

oracle - SQL*Plus 输入 : How do you get input from user into varchar2 variable?

visual-studio - 在 Visual Studio 中调试时如何设置特定的环境变量?

server - 如何在 Wildfly 配置文件中使用变量?

oracle - sqlplus 打印运行语句