SYS_CONTEXT ‘USERENV’

Bom dia.

Para muitos esse é um tópico batido, e muitos já saberão a fundo do mesmo. Porem não custa escrever para quem não conhece utilizar.

Aqui no www.oraclehome.com.br já tivemos um post do nosso ADM Anderson Graf que utilizou o sys_context para pegar o seu sid. Clique aqui para ver o post do Anderson.

 

Bom pessoal o sys_context foi criado para coletar informações próprias.

Observe a syntaxe.

select sys_context('USERENV','SID') "SID" from dual;

Este select irá retornar o sid da seção que esta executando. Porem temos varias outras possibilidades para o sys_context.

Observe o select abaixo:

SELECT
  SYS_CONTEXT( 'USERENV', 'ACTION' ) action,
  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_SCHEMAID' ) current_schemaid,
  SYS_CONTEXT( 'USERENV', 'CURRENT_SCHEMA' ) current_schema,
  SYS_CONTEXT( 'USERENV', 'CURRENT_USER' ) current_user,
  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', 'HOST' ) host,
  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', 'NETWORK_PROTOCOL' ) network_protocol,
  SYS_CONTEXT( 'USERENV', 'NLS_CALENDAR' ) nls_calendar,
  SYS_CONTEXT( 'USERENV', 'NLS_CURRENCY' ) nls_currency,
  SYS_CONTEXT( 'USERENV', 'OS_USER' ) os_user,
  SYS_CONTEXT( 'USERENV', 'SERVER_HOST' ) server_host,
  SYS_CONTEXT( 'USERENV', 'TERMINAL' ) terminal
FROM dual;

Então estes são todos os parâmetros que você pode coletar de si mesmo.
Muitos vão me questionar. Pra que serve saber meu IP, ou meu host?
Bom, para muitas coisas. Para debugar um pl/sql ou até mesmo para auditar informações de quem executou determinadas funções.

Também há como coletar estas informações através de funções.

DECLARE
   PROCEDURE showenv (str IN VARCHAR2) IS
   BEGIN
      DBMS_OUTPUT.PUT_LINE (
         str || '=' || SYS_CONTEXT ('USERENV', str));
   END;
BEGIN
   showenv ('NLS_CURRENCY');
   showenv ('NLS_CALENDAR');
   showenv ('NLS_DATE_FORMAT');
   showenv ('NLS_DATE_LANGUAGE');
   showenv ('NLS_SORT');
   showenv ('SESSION_USER');
   showenv ('CURRENT_USER');
   showenv ('CURRENT_SCHEMA');
   showenv ('CURRENT_SCHEMAID');
   showenv ('SESSION_USERID');
   showenv ('CURRENT_USERID');
   showenv ('IP_ADDRESS');
END;
/

Cada campo “showenv (‘XXXXXXX’);”, pode ser adicionado uma linha daquelas la em cima onde já postei.
Observe na Pratica.

SQL> set serveroutput on
SQL> DECLARE
  2     PROCEDURE showenv (str IN VARCHAR2) IS
  3     BEGIN
  4        DBMS_OUTPUT.PUT_LINE (
  5           str || '=' || SYS_CONTEXT ('USERENV', str));
  6     END;
  7  BEGIN
  8     showenv ('NLS_CURRENCY');
  9     showenv ('NLS_CALENDAR');
 10     showenv ('NLS_DATE_FORMAT');
 11     showenv ('NLS_DATE_LANGUAGE');
 12     showenv ('NLS_SORT');
 13     showenv ('SESSION_USER');
 14     showenv ('CURRENT_USER');
 15     showenv ('CURRENT_SCHEMA');
 16     showenv ('CURRENT_SCHEMAID');
 17     showenv ('SESSION_USERID');
 18     showenv ('CURRENT_USERID');
 19     showenv ('IP_ADDRESS');
 20  END;
 21  /
 
NLS_CURRENCY=$
NLS_CALENDAR=GREGORIAN
NLS_DATE_FORMAT=DD-MON-RR
NLS_DATE_LANGUAGE=AMERICAN
NLS_SORT=BINARY
SESSION_USER=LANA
CURRENT_USER=LANA
CURRENT_SCHEMA=LANA
CURRENT_SCHEMAID=56
SESSION_USERID=56
CURRENT_USERID=56
IP_ADDRESS=192.168.10.198
 
PL/SQL procedure successfully completed
 

Qualquer duvida estou a disposição para responder seus comentários.

Ref: docstore.mik.ua e docs.oracle.com

%name SYS CONTEXT USERENV

Autor: Leandro Lana

Trabalho com banco de dados Oracle desde 2006, já trabalhei com as plataformas 9i, 10G, 11G e 12C.

Trabalhando atualmente como consultor Oracle na MigraTI Soluções em TI como administrador de banco de dados Oracle, SQL-Server e DB2.

Contato: leandro.lana@migrati.com.br

Fone: (47) 9191-6052 / (47) 3328 0996

Certificações:

OCA 10G.

OCP 10G.

OCE Linux.

OCE RAC/Cluster.

MCP SQL-Server 2008.

MCITP SQL-Server 2008.

DB2 Fundamentals.