如何在oracle中用sql语句读取环境变量

时间:2014-01-08 09:10:06

标签: sql oracle environment-variables

我在我的系统上使用Oracle 11g,我需要使用SQL获取系统的环境变量。

有没有办法得到它? (例如USER,HOME,PATH,事实上,我需要为系统管理获取自定义环境变量。)

或者我在PL / SQL中读到了dbms_system.get_env()。我如何从我的SQL中使用它? (对不起,我离系统管理员更近了。)

编辑: 我想做的是下面的事情:

=============================
  java: query to get XXX_INFO
  ---------------------------
server:
=============================
              |
=============================
  dbms: select SOMETHING...
  ---------------------------
server: export XXX_INFO=myXXX
=============================

4 个答案:

答案 0 :(得分:2)

您可以使用sys_context函数获取所需的信息。 例如,要获取系统的IP地址,请将其用作

select sys_context('USERENV', 'IP_ADDRESS') from dual

输出

| SYS_CONTEXT('USERENV','IP_ADDRESS') |
|-------------------------------------|
|                          10.0.0.113 |

关注此link以获取更多信息

https://docs.oracle.com/database/121/SQLRF/functions199.htm#SQLRF06117

答案 1 :(得分:1)

从SQL * Plus安装DBMS_SYSTEM作为SYSDBA。然后创建一个函数并将执行权授予您的用户。通常在SYS中创建对象是一个坏主意,但由于DBMS_SYSTEM未记录,您可能希望避免将整个包授予任何人。

SQL> @?/rdbms/admin/dbmsutil.sql

Session altered.

Package created.

Synonym created.

Grant succeeded.

Session altered.

SQL> create or replace function sys.get_env(p_var in varchar2) return varchar2 is
  2     v_return_value varchar2(4000);
  3  begin
  4     dbms_system.get_env(p_var, v_return_value);
  5     return v_return_value;
  6  end;
  7  /

Function created.

SQL> grant execute on sys.get_env to <your user>;

Grant succeeded.

SQL>

现在来自您的用户:

SQL> select sys.get_env('ORACLE_HOME') from dual;

SYS.GET_ENV('ORACLE_HOME')
--------------------------------------------------
C:\app\oracle\product\12.1.0\dbhome_1

答案 2 :(得分:1)

从 Oracle 12c 开始,您可以在 SQL 中使用这样的过程:

WITH
  FUNCTION get_env(p_name IN VARCHAR2) RETURN VARCHAR2 IS
    v_ret VARCHAR2(4000);
  BEGIN
    dbms_system.get_env(p_name, v_ret);
    RETURN v_ret;
  END;
SELECT get_env('HOME') FROM dual

当然,在这种情况下,您还需要访问 dbms_system

答案 3 :(得分:-1)

如果您正在Docker内部使用Mariadb,并且在沿ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)的方向运行某些程序时得到docker exec -ti db mysql -uroot -p,请尝试以下操作

docker run --rm -ti mariadb:10.5 cat /etc/mysql/mariadb.conf.d/50-server.cnf > server.cnf

然后写这些文件

# Dockerfile
FROM mariadb:10.5

COPY ./server.cnf /etc/mysql/mariadb.conf.d/50-server.cnf

根据this knowledge base article更新server.cnf

# server.cnf
bind-address = 127.0.0.1

然后

docker build --tag some-db .
docker run --detach --name=db --env=MYSQL_ROOT_PASSWORD=<password> some-db
docker exec -ti db mysql -uroot -p