【问题标题】:Read all parameters from SYS_CONTEXT/USERENV从 SYS_CONTEXT/USERENV 读取所有参数
【发布时间】:2020-08-13 18:25:27
【问题描述】:

所以我们在 Oracle 中有这个 SYS_CONTEXT function,它接受两个参数,第一个是命名空间,第二个是参数名称。有一个名为 USERENV 的预定义命名空间,它带有各种参数,其确切数量和名称取决于所使用的 Oracle 版本。

使用 Firefox 和 Firequery,您可以从上面链接的 Oracle 文档页面获取所有参数名称的列表,如下所示:

$("tr > td[id] > p > code").map(function () { return $(this).text() })

然后您可以构建一个读取和输出整个上下文的过程 - 至少对于您获取参数的版本。

但是抛开这种阅读SYS_CONTEXT/USERENV 的静态方式不谈,有没有一种动态的方式呢?数据字典中的某个位置列出了USERENV?的有效参数的名称?

至于我为什么要阅读USERENV,只是为了闲暇学习和好奇。

【问题讨论】:

    标签: oracle


    【解决方案1】:

    我想这可能对你有帮助。 下面的查询将 Oracle USERENV 上下文转储为一个表。

        select res.*
        from (
          select *
          from (
            select
              sys_context ('userenv','ACTION') ACTION,
              sys_context ('userenv','AUDITED_CURSORID') AUDITED_CURSORID,
              sys_context ('userenv','AUTHENTICATED_IDENTITY') AUTHENTICATED_IDENTITY,
              sys_context ('userenv','AUTHENTICATION_DATA') AUTHENTICATION_DATA,
              sys_context ('userenv','AUTHENTICATION_METHOD') AUTHENTICATION_METHOD,
              sys_context ('userenv','BG_JOB_ID') BG_JOB_ID,
              sys_context ('userenv','CLIENT_IDENTIFIER') CLIENT_IDENTIFIER,
              sys_context ('userenv','CLIENT_INFO') CLIENT_INFO,
              sys_context ('userenv','CURRENT_BIND') CURRENT_BIND,
              sys_context ('userenv','CURRENT_EDITION_ID') CURRENT_EDITION_ID,
              sys_context ('userenv','CURRENT_EDITION_NAME') CURRENT_EDITION_NAME,
              sys_context ('userenv','CURRENT_SCHEMA') CURRENT_SCHEMA,
              sys_context ('userenv','CURRENT_SCHEMAID') CURRENT_SCHEMAID,
              sys_context ('userenv','CURRENT_SQL') CURRENT_SQL,
              sys_context ('userenv','CURRENT_SQLn') CURRENT_SQLn,
              sys_context ('userenv','CURRENT_SQL_LENGTH') CURRENT_SQL_LENGTH,
              sys_context ('userenv','CURRENT_USER') CURRENT_USER,
              sys_context ('userenv','CURRENT_USERID') CURRENT_USERID,
              sys_context ('userenv','DATABASE_ROLE') DATABASE_ROLE,
              sys_context ('userenv','DB_DOMAIN') DB_DOMAIN,
              sys_context ('userenv','DB_NAME') DB_NAME,
              sys_context ('userenv','DB_UNIQUE_NAME') DB_UNIQUE_NAME,
              sys_context ('userenv','DBLINK_INFO') DBLINK_INFO,
              sys_context ('userenv','ENTRYID') ENTRYID,
              sys_context ('userenv','ENTERPRISE_IDENTITY') ENTERPRISE_IDENTITY,
              sys_context ('userenv','FG_JOB_ID') FG_JOB_ID,
              sys_context ('userenv','GLOBAL_CONTEXT_MEMORY') GLOBAL_CONTEXT_MEMORY,
              sys_context ('userenv','GLOBAL_UID') GLOBAL_UID,
              sys_context ('userenv','HOST') HOST,
              sys_context ('userenv','IDENTIFICATION_TYPE') IDENTIFICATION_TYPE,
              sys_context ('userenv','INSTANCE') INSTANCE,
              sys_context ('userenv','INSTANCE_NAME') INSTANCE_NAME,
              sys_context ('userenv','IP_ADDRESS') IP_ADDRESS,
              sys_context ('userenv','ISDBA') ISDBA,
              sys_context ('userenv','LANG') LANG,
              sys_context ('userenv','LANGUAGE') LANGUAGE,
              sys_context ('userenv','MODULE') MODULE,
              sys_context ('userenv','NETWORK_PROTOCOL') NETWORK_PROTOCOL,
              sys_context ('userenv','NLS_CALENDAR') NLS_CALENDAR,
              sys_context ('userenv','NLS_CURRENCY') NLS_CURRENCY,
              sys_context ('userenv','NLS_DATE_FORMAT') NLS_DATE_FORMAT,
              sys_context ('userenv','NLS_DATE_LANGUAGE') NLS_DATE_LANGUAGE,
              sys_context ('userenv','NLS_SORT') NLS_SORT,
              sys_context ('userenv','NLS_TERRITORY') NLS_TERRITORY,
              sys_context ('userenv','OS_USER') OS_USER,
              sys_context ('userenv','POLICY_INVOKER') POLICY_INVOKER,
              sys_context ('userenv','PROXY_ENTERPRISE_IDENTITY') PROXY_ENTERPRISE_IDENTITY,
              sys_context ('userenv','PROXY_USER') PROXY_USER,
              sys_context ('userenv','PROXY_USERID') PROXY_USERID,
              sys_context ('userenv','SERVER_HOST') SERVER_HOST,
              sys_context ('userenv','SERVICE_NAME') SERVICE_NAME,
              sys_context ('userenv','SESSION_EDITION_ID') SESSION_EDITION_ID,
              sys_context ('userenv','SESSION_EDITION_NAME') SESSION_EDITION_NAME,
              sys_context ('userenv','SESSION_USER') SESSION_USER,
              sys_context ('userenv','SESSION_USERID') SESSION_USERID,
              sys_context ('userenv','SESSIONID') SESSIONID,
              sys_context ('userenv','SID') SID,
              sys_context ('userenv','STATEMENTID') STATEMENTID,
              sys_context ('userenv','TERMINAL') TERMINAL
            from dual
            -- where sys_context ('userenv','SESSIONID') NOT in ('SYS', 'XDB')    -- <<<<< filter by user
          )
          unpivot include nulls (
            val for name in (action, audited_cursorid, authenticated_identity, authentication_data, authentication_method, bg_job_id, client_identifier, client_info, current_bind, current_edition_id, current_edition_name, current_schema, current_schemaid, current_sql, current_sqln, current_sql_length, current_user, current_userid, database_role, db_domain, db_name, db_unique_name, dblink_info, entryid, enterprise_identity, fg_job_id, global_context_memory, global_uid, host, identification_type, instance, instance_name, ip_address, isdba, lang, language, module, network_protocol, nls_calendar, nls_currency, nls_date_format, nls_date_language, nls_sort, nls_territory, os_user, policy_invoker, proxy_enterprise_identity, proxy_user, proxy_userid, server_host, service_name, session_edition_id, session_edition_name, session_user, session_userid, sessionid, sid, statementid, terminal)
          )
        ) res;
    

    【讨论】:

      【解决方案2】:

      无法确定 userenv 命名空间支持的值。一种方法是使用支持的参数名称创建一个表。

      【讨论】:

      • 谢谢,创建表很容易,create table userenv (parameter varchar2(30)),然后(在 SQL*Plus 中)column value format a50select parameter, sys_context('userenv', parameter) as value from userenv order by parameter
      猜你喜欢
      • 1970-01-01
      • 2012-06-15
      • 2017-09-23
      • 2020-12-15
      • 2012-01-06
      • 1970-01-01
      • 1970-01-01
      • 2012-09-18
      • 2020-10-15
      相关资源
      最近更新 更多