So che questo è un vecchio thread, ma ci sono appena imbattuto e sento che non è stato spiegato completamente.
C'è un'enorme differenza in SQL*Plus tra il significato di un /
e un ;
perché funzionano in modo diverso.
Il ;
termina un'istruzione SQL, mentre /
esegue tutto ciò che è nel "buffer" corrente. Quindi, quando usi un ;
e un /
l'istruzione viene effettivamente eseguita due volte.
Puoi facilmente vederlo usando un /
dopo aver eseguito un'istruzione:
SQL*Plus: Release 11.2.0.1.0 Production on Wed Apr 18 12:37:20 2012
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning and OLAP options
SQL> drop table foo;
Table dropped.
SQL> /
drop table foo
*
ERROR at line 1:
ORA-00942: table or view does not exist
In questo caso si nota effettivamente l'errore.
Ma supponendo che ci sia uno script SQL come questo:
drop table foo;
/
E questo viene eseguito da SQL*Plus, quindi sarà molto confuso:
SQL*Plus: Release 11.2.0.1.0 Production on Wed Apr 18 12:38:05 2012
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning and OLAP options
SQL> @drop
Table dropped.
drop table foo
*
ERROR at line 1:
ORA-00942: table or view does not exist
Il /
è richiesto principalmente per eseguire istruzioni che hanno incorporato ;
come CREATE PROCEDURE
,CREATE FUNCTION
,CREATE PACKAGE
dichiarazioni e per qualsiasi BEGIN...END
blocchi.