Problemet är att SQL*Plus tolkar din första ;
som terminator för kommandot. Du kanske har märkt att om du skriver dina kommandon till en textfil och kör den (eller redigerar den i en textredigerare från med SQL*Plus) så fungerar det.
För att få det att fungera med live typing, om du verkligen vill göra det (verkar osannolikt om de kommer att vara väldigt långa!), kan du stänga av den automatiska upptäckten av terminatorn med SET SQLTERMINATOR off
. Observera att du måste berätta för SQL*Plus att du är klar och att den ska köras med /
instruktion som den andra ;
ignoreras också.
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.
Om du bygger dessa från dataordboken är ett annat alternativ att använda PL/SQL för att göra frågorna och manipulationerna och dbms_output
för att producera utdata ska du spoola, så länge som den slutliga filstorleken inte överskrider buffertgränserna.