Blog
08 de dezembro de 2021
Dica Oracle - Capturar variáveis de SO com dbms_system.get_env
Através do pacote DBMS_SYSTEM do Oracle RDBMS podemos fazer várias coisas, como:
-
Escrever no alertlog (DBMS_SYSTEM.KSDWRT)
-
Alterar parâmetros de outra sessão (DBMS_SYSTEM.SET_INT_PARAM_IN_SESSION e DBMS_SYSTEM.SET_BOOL_PARAM_IN_SESSION)
-
Habilitar e desabilitar SQL Traces (DBMS_SYSTEM.SET_EV)
-
e também, permite capturarmos variáveis do Sistema Operacional (SO) para dentro do banco de dados, como veremos a seguir:
SQL> var VAR varchar2(255) SQL> exec dbms_system.get_env('ORACLE_HOME',:VAR); PL/SQL procedure successfully completed. SQL> print :VAR VAR -------------------------------------------------------------------------------- /orabin/app/oracle/product/12.2.0.1/dbhome_1
Exportando uma variável de teste:
Banco=cdb1-> export TESTE="variavel de teste" Banco=cdb1-> sqlplus / as sysdba SQL*Plus: Release 12.2.0.1.0 Production on Mon Apr 3 03:47:54 2017 Copyright (c) 1982, 2016, Oracle. All rights reserved. Connected to: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production SQL> var VAR varchar2(255) SQL> exec dbms_system.get_env('TESTE',:VAR); PL/SQL procedure successfully completed. SQL> print :VAR VAR -------------------------------------------------------------------------------- variavel de teste
Exemplo criando uma function para retorno da variável:
SQL> create or replace function getvar (envvar varchar2) return varchar2 as output varchar2(4000); begin dbms_system.get_env(envvar, output); return output; end; / Function created. SQL> select getvar('ORACLE_HOME') from dual; GETVAR('ORACLE_HOME') -------------------------------------------------------------------------------- /orabin/app/oracle/product/12.2.0.1/dbhome_1
Exemplo criando uma procedure para retorno da variável:
SQL> create or replace procedure getvar2 (envvar varchar2) as output varchar2(4000); begin dbms_system.get_env(envvar, output); dbms_output.put_line(output); end; / Procedure created. SQL> set serveroutpu on SQL> exec getvar2('TESTE'); variavel de teste PL/SQL procedure successfully completed. SQL> exec getvar2('ORACLE_HOME'); /orabin/app/oracle/product/12.2.0.1/dbhome_1 PL/SQL procedure successfully completed.
Postado por:
Anderson Graf
200 visualizações