Oracle中SQL语句如何读取环境变量

ppcbkaq5  于 2023-04-20  发布在  Oracle
关注(0)|答案(4)|浏览(174)

我在我的系统上使用Oracle 11 g,我需要使用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
=============================
guicsvcw

guicsvcw1#

从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
6vl6ewon

6vl6ewon2#

你可以使用sys_context函数来获取你所需要的信息。例如-获取系统的ip地址,将其用作

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

输出

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

点击此链接了解更多信息
https://docs.oracle.com/database/121/SQLRF/functions199.htm#SQLRF06117

fjaof16o

fjaof16o3#

从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

8oomwypt

8oomwypt4#

我可以做到这一点(在Exadata上)

select *
from V$instance;

这让我明白:
STATUS、PARALLEL、ARCHIVER、LOG_SWITCH_WAIT、LOGINS、SHUTDOWN_PENDING、DATABASE_STATUS、INSTANCE_ROLE、ACTIVE_STATE、BLOCKED、CON_ID、INSTANCE_MODE、EDITION、FAMILY、DATABASE_TYPE
然后:

select *
from V$database;

DBID、NAME、CREATED、RESETLOGS_CHANGE#、RESETLOGS_TIME、PRIOR_RESETLOGS_CHANGE#、PRIOR_RESETLOGS_TIME、LOG_MODE、CHECKPOINT_CHANGE#、ARCHIVE_CHANGE#、CONTROLFILE_TYPE、CONTROLFILE_CREATED、CONTROLFILE_SEQUENCE#、CONTROLFILE_CHANGE#、CONTROLFILE_TIME、OPEN_RESETLOGS、VERSION_TIME、OPEN_MODE、PROTECTION_MODE、PROTECTION_LEVEL、REMOTE_ARCHIVE、ACTIVATION#、SWITCHVER #、DATABASE_ROLE、ARCHIVELOG_CHANGE#、ARCHIVELOG_COMPRESSION、SWITCHOVER_STATUS、DATAGUARD_BROKER、GUARD_STATUS、SUPPLEMENTAL_LOG_DATA_MIN、SUPPLEMENTAL_LOG_DATA_PK、SUPPLEMENTAL_LOG_DATA_UI、FORCE_LOGGING、PLATFORM_ID、PLATFORM_NAME、RECOVERY_TARGET_INCARNATION #、LAST_OPEN_INCARNATION#、CURRENT_SCN、FLASHBACK_ON、SUPPLEMENTAL_LOG_DATA_FK、SUPPLEMENTAL_LOG_DATA_ALL、DB_UNIQUE_NAME、STANDBY_BECAME_PRIMARY_SCN、FS_FAILOVER_MODE、FS_FAILOVER_STATUS、FS_FAILOVER_CURRENT_TARGET、FS_FAILOVER_THRESHOLD、FS_FAILOVER_OBSERVER_PRESENT、FS_FAILOVER_OBSERVER_HOST、CONTROLFILE_CONVERTED、PRIMARY_DB_UNIQUE_NAME、SUPPLEMENTAL_LOG_DATA_PL、MIN_REQUIRED_CAPTURE_CHANGE#、CDB、CON_ID、PENDING_ROLE_CHANGE_TASKS、CON_DBID、FORCE_FULL_DB_CACHING、SUPPLEMENTAL_LOG_DATA_SR
在我的情况下,名称是我所需要的

相关问题