Oracle
 sql >> Database >  >> RDS >> Oracle

Generazione di script SQL*Plus utilizzando SQL*Plus

Il problema è che SQL*Plus sta interpretando il tuo primo ; come terminatore per il comando. Potresti aver notato che se scrivi i tuoi comandi su un file di testo e lo esegui (o lo modifichi in un editor di testo da SQL*Plus) funziona.

Per farlo funzionare con la digitazione in tempo reale, se vuoi davvero farlo (sembra improbabile se saranno molto lunghi!), puoi disattivare il rilevamento automatico del terminatore con SET SQLTERMINATOR off . Nota che dovrai dire a SQL*Plus che hai finito e che dovrebbe essere eseguito con / istruzione come secondo ; viene anche ignorato.

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 li stai compilando dal dizionario dei dati, un'altra opzione è usare PL/SQL per eseguire le query e le manipolazioni e dbms_output per produrre l'output che stai per eseguire lo spooling, a condizione che la dimensione del file finale non superi i limiti del buffer.