Oracle
 sql >> Database >  >> RDS >> Oracle

Quando è necessario utilizzare un punto e virgola rispetto a una barra in Oracle SQL?

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.