Ik weet dat dit een oud draadje is, maar ik kwam het net tegen en ik heb het gevoel dat dit niet volledig is uitgelegd.
Er is een enorm verschil in SQL*Plus tussen de betekenis van een /
en een ;
omdat ze anders werken.
De ;
een SQL-instructie beëindigt, terwijl de /
voert uit wat zich in de huidige "buffer" bevindt. Dus wanneer u een ;
. gebruikt en een /
de instructie wordt eigenlijk twee keer uitgevoerd.
Je kunt dat gemakkelijk zien met een /
na het uitvoeren van een verklaring:
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 dit geval merkt men de fout daadwerkelijk op.
Maar ervan uitgaande dat er een SQL-script is zoals dit:
drop table foo;
/
En dit wordt uitgevoerd vanuit SQL*Plus, dan zal dit erg verwarrend zijn:
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
De /
is voornamelijk vereist om instructies uit te voeren met ingesloten ;
zoals CREATE PROCEDURE
,CREATE FUNCTION
,CREATE PACKAGE
verklaringen en voor alle BEGIN...END
blokken.