Hola a todos. Hoy queríamos compartir con vosotros una forma de ejecutar comandos de Oracle dentro de scripts de Linux.
Una forma muy cómoda de cargar las variables de entorno es utilizando el comando oraenv. Por ejemplo, podemos ejecutar este script, para evitar que salga el prompt por pantalla:
export ORAENV_ASK=NO; export ORACLE_SID=ORCL1; . oraenv echo $ORACLE_HOME /datos/oracle/product/12.2.0/db1
Una vez cargadas las variables de Oracle, podemos ejecutar queries de la siguiente forma:
echo "Select * from dual;" | sqlplus / as sysdba
El resultado es:
SQL*Plus: Release 12.2.0.1.0 Production on Wed Aug 21 14:13:12 2019 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 12.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> D - X SQL> Disconnected from Oracle Database 11g Enterprise Edition Release 12.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options
Lo podemos complicar un poco más. Para cargar las variables y lanzar la query a la vez, ejecutamos:
export ORAENV_ASK=NO;export ORACLE_SID=ORCL2;. oraenv 1>/dev/null; echo "Select * from dual;" | sqlplus / as sysdba SQL*Plus: Release 12.2.0.1.0 Production on Wed Aug 21 14:14:55 2019 Copyright (c) 1982, 2016, Oracle. All rights reserved. Connected to: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production SQL> D - X SQL> Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
Con estas funcionalidades ya tenemos el esqueleto para ejecutar nuestros scripts. Podemos programar scripts incluso como root y que ejecuten las sentencias con su – oracle:

Como habéis podido observar, para que no se produzca un error de sintaxis hay que utilizar el caracter de escape \ delante de las comillas dobles:
\"Select * from dual;\"
De esta forma podemos incluso ejecutar scripts que pasen como parámetros valores con comillas simples y variables:
su - oracle -c "export ORAENV_ASK=NO;export ORACLE_SID=ORCL2;. oraenv 1>/dev/null; echo \"@script.sql '${fechainicio}'" | sqlplus / as sysdba"
Esperamos que os sea de utilidad la próxima vez que tengáis que programar algún script de Oracle en una máquina.
Nos vemos en próximas entradas. Si no quieres perderte ninguna, suscríbete a nuestra newsletter mensual para estar al tanto de nuestras entradas con un solo email al mes.