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
Autor: Leandro Lana
Trabalho com banco de dados Oracle desde 2006, já trabalhei com as plataformas 9i, 10G, 11G, 12C, 18C, 19C e 21(ainda em testes).
Trabalhando atualmente como consultor Oracle na MigraTI Soluções em TI como administrador de banco de dados Oracle, SQL-Server, MySQL e Postgresql.
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.
One thought on “SYS_CONTEXT ‘USERENV’”