Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Quando preciso usar um ponto e vírgula versus uma barra no Oracle SQL?


Eu sei que este é um tópico antigo, mas acabei de tropeçar nele e sinto que isso não foi explicado completamente.

Há uma grande diferença no SQL*Plus entre o significado de um / e um ; porque funcionam de forma diferente.

O ; termina uma instrução SQL, enquanto o / executa o que estiver no "buffer" atual. Então, quando você usa um ; e um / a instrução é realmente executada duas vezes.

Você pode ver isso facilmente usando um / depois de executar uma instrução:
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

Neste caso, percebe-se o erro.


Mas supondo que exista um script SQL como este:
drop table foo;
/

E isso é executado de dentro do SQL * Plus, isso será muito 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

O / é necessário principalmente para executar instruções que tenham incorporado ; como CREATE PROCEDURE ,CREATE FUNCTION ,CREATE PACKAGE instruções e para qualquer BEGIN...END blocos.