sql >> Databasteknik >  >> RDS >> Oracle

När behöver jag använda semikolon kontra snedstreck i Oracle SQL?

Jag vet att detta är en gammal tråd, men jag snubblade över den och jag känner att detta inte har förklarats helt.

Det finns en enorm skillnad i SQL*Plus mellan betydelsen av en / och en ; eftersom de fungerar annorlunda.

; avslutar en SQL-sats, medan / exekverar allt som finns i den aktuella "bufferten". Så när du använder en ; och en / uttalandet körs faktiskt två gånger.

Du kan enkelt se det med en / efter att ha kört ett uttalande:

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

I det här fallet märker man faktiskt felet.


Men förutsatt att det finns ett SQL-skript så här:

drop table foo;
/

Och detta körs inifrån SQL*Plus, då blir det här väldigt förvirrande:

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

/ krävs huvudsakligen för att köra programsatser som har inbäddat ; som SKAPA PROCEDUR ,SKAPA FUNKTION ,SKAPA PAKET satser och för alla BEGIN...END block.



  1. SQL:Vad är bättre en bit eller en char(1)

  2. Att få en dynamiskt genererad pivottabell till en Temp-tabell

  3. Konsolidera SQL Server-instanser genom klustring och stapling

  4. Benchmarking manuella databasdistributioner kontra automatiserade distributioner