Je sais que c'est un vieux fil, mais je viens de tomber dessus et j'ai l'impression que cela n'a pas été complètement expliqué.
Il y a une énorme différence dans SQL*Plus entre la signification d'un /
et un ;
parce qu'ils fonctionnent différemment.
Le ;
termine une instruction SQL, alors que le /
exécute tout ce qui se trouve dans le "tampon" actuel. Ainsi, lorsque vous utilisez un ;
et un /
l'instruction est en fait exécutée deux fois.
Vous pouvez facilement le voir en utilisant un /
après avoir exécuté une instruction :
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
Dans ce cas, on remarque en fait l'erreur.
Mais en supposant qu'il existe un script SQL comme celui-ci :
drop table foo;
/
Et ceci est exécuté à partir de SQL*Plus, alors ce sera très déroutant :
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
Le /
est principalement requis pour exécuter des instructions qui ont intégré ;
comme CREATE PROCEDURE
,CREATE FUNCTION
,CREATE PACKAGE
déclarations et pour tout BEGIN...END
blocs.