sql >> Base de Datos >  >> RDS >> Oracle

Generación de secuencias de comandos SQL*Plus utilizando SQL*Plus

El problema es que SQL*Plus está interpretando su primer ; como terminador del comando. Es posible que haya notado que si escribe sus comandos en un archivo de texto y lo ejecuta (o lo edita en un editor de texto con SQL*Plus), funciona.

Para que funcione con la escritura en vivo, si realmente quieres hacer eso (¡parece poco probable si van a ser muy largos!), puedes desactivar la detección automática del terminador con SET SQLTERMINATOR off . Tenga en cuenta que tendrá que decirle a SQL*Plus que ha terminado y que debería ejecutarse con / instrucción como el segundo ; también se ignora.

SQL> SPOOL myscript.sql
SQL> SET SQLTERMINATOR off
SQL> SELECT q'[SPOOL log
  2  SELECT COUNT(*) FROM DUAL;
  3  PROMPT Done.
  4  ]' FROM DUAL
  5  /
SPOOL log
SELECT COUNT(*) FROM DUAL;
PROMPT Done.

Si está construyendo estos desde el diccionario de datos, otra opción es usar PL/SQL para realizar las consultas y manipulaciones y dbms_output para producir la salida que va a poner en cola, siempre que el tamaño final del archivo no supere los límites del búfer.