Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Gerando script SQL*Plus usando SQL*Plus


O problema é que o SQL*Plus está interpretando seu primeiro ; como o terminador para o comando. Você deve ter notado que se você escrever seus comandos em um arquivo de texto e executá-lo (ou editá-lo em um editor de texto com o SQL*Plus), ele funcionará.

Para fazê-lo funcionar com a digitação ao vivo, se você realmente quiser fazer isso (parece improvável se eles forem muito longos!), você pode desativar a detecção automática do terminador com SET SQLTERMINATOR off . Observe que você terá que dizer ao SQL*Plus que terminou e que ele deve ser executado com o / instrução como o segundo ; também é ignorado.
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.

Se você estiver construindo a partir do dicionário de dados, outra opção é usar PL/SQL para fazer as consultas e manipulações e dbms_output para produzir a saída que você vai colocar em spool, contanto que o tamanho final do arquivo não exceda os limites do buffer.