sql >> Database >  >> RDS >> Oracle

Wanneer moet ik een puntkomma versus een schuine streep gebruiken in Oracle SQL?

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.



  1. Awesome 24 Concurrent Manager Sollicitatievragen

  2. Taken op afstand uitvoeren vanuit IRI Workbench

  3. Oracle JDeveloper gebruiken met MySQL Database Service op Oracle Cloud Platform, deel 2

  4. Meerdere manieren om duplicaten uit SQL-tabellen te verwijderen