Si puede poner esta sección de control en su propio script, p. elcm_ctl.sql
, podrías hacer eso:
accept run_it char format a1 prompt "Run the script?"
set termout off
whenever sqlerror exit success rollback
exec if upper(nvl('&run_it', 'N')) != 'Y' then raise no_data_needed; end if;
whenever sqlerror continue
spool c:\elcm.sql
select 'select sysdate from dual;' from dual;
spool off
set termout on
spool c:\elcm_details.spl
@c:\elcm.sql
spool off
El accept
comando
en mi opinión, es un poco más ordenado que confiar en indicaciones de sustitución, y es algo autodocumentado. Esto solicita al usuario la cadena especificada, en lugar de solo 'gen'
. (En SQL*Plus, puede extender esto y obligar al usuario a ingresar un solo carácter, volviendo a preguntar si ingresan algo más largo; y por defecto a 'N' si simplemente presionan regresar sin ingresar nada. Pero SQL Developer solo admite un subconjunto de la funcionalidad).
Luego, un pequeño bloque anónimo arroja una excepción, realmente no importa cuál, si el valor de la variable ingresada no es 'y'
o 'Y'
. Mientras lo hace, he set termout off
para que no vea la excepción real. Y he usado whenever sqlerror
para hacer que el script salga cuando se genera esa excepción, de modo que lo que venga después no se ejecute. Eso es todo lo demás en el script de control, no solo la siguiente consulta, sino que podría tener varios subguiones si necesitara ser más flexible.
Pero en SQL Developer, termout
solo funciona como se espera cuando se ejecuta a través de @
. Si ejecuta el contenido de elcm_ctl.sql
directamente desde la hoja de trabajo de SQL, verá que se genera la excepción, lo cual es un poco feo. Entonces, en su lugar, guarde ese script de control y en una hoja de trabajo vacía simplemente haga:
@c:\elcm_ctl.sql
Ejecute esa hoja de trabajo como un script y le indicará; si ingresa 'Y'
verá el resultado del script en la ventana de salida del script (a menos que deje set termout off
) en el script de control), y creará el archivo de cola. Si ingresa algo más, no se ejecutará elcm.sql
archivo, no mostrará nada en la ventana de salida del script y no creará un archivo de spool.