Oracle
 sql >> Base de données >  >> RDS >> Oracle

Quand dois-je utiliser un point-virgule plutôt qu'une barre oblique dans Oracle SQL ?

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.