Ocultar la SQL en un fichero de spool de Oracle

From Luniwiki
Jump to: navigation, search

Problema

Si se llama un fichero SQl con @fichero nuestro fichero de spool, no tiene la SQL

cat sample.sql
whenever sqlerror exit 2;
whenever oserror exit 1;
set pagesize 0
set linesize 9999
set echo off
set trimspool on
set trim on
set feedback off
set termout off
spool 'hola.csv'
select * from dual;
spool off
quit
$ORACLE_HOME/bin/sqlplus usuario/passwd@schema @sample.sql

Nuestro fichero de salida hola.csv solo tiene

cat hola.csv
X

Pero si lo llamamos desde un script

$ORACLE_HOME/bin/sqlplus usuario/passwd@schema <<EOF
whenever sqlerror exit 2;
whenever oserror exit 1;
set pagesize 0
set linesize 9999
set echo off
set trimspool on
set trim on
set feedback off
set termout off
spool 'hola.csv'
select * from dual;
spool off
quit
EOF

El fichero contiene la SQL

cat hola.csv
SQL> select * from dual;
X
SQL> spool off

Para solventar el problema hay que llamar el SQLPlus con la opción -S

$ORACLE_HOME/bin/sqlplus -S usuario/passwd@schema <<EOF
whenever sqlerror exit 2;
whenever oserror exit 1;
set pagesize 0
set linesize 9999
set echo off
set trimspool on
set trim on
set feedback off
set termout off
spool 'hola.csv'
select * from dual;
spool off
quit
EOF

El fichero contiene la SQL

cat hola.csv
 X
 

Referencias

--Daniel Simao 17:07 20 mar 2012 (UTC)