Problemet er, at SQL*Plus fortolker din første ;
som terminator for kommandoen. Du har måske bemærket, at hvis du skriver dine kommandoer til en tekstfil og udfører den (eller redigerer den i en teksteditor fra med SQL*Plus), virker det.
For at få det til at fungere med direkte indtastning, hvis du virkelig ønsker at gøre det (det virker usandsynligt, hvis de bliver meget lange!), kan du slå den automatiske registrering af terminatoren fra med SET SQLTERMINATOR off
. Bemærk, at du bliver nødt til at fortælle SQL*Plus, at du er færdig, og at den skal udføres med /
instruktion som den anden ;
ignoreres også.
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.
Hvis du bygger disse fra dataordbogen, er en anden mulighed at bruge PL/SQL til at udføre forespørgsler og manipulationer og dbms_output
for at producere det output, du vil spoole, så længe den endelige filstørrelse ikke overskrider buffergrænserne.