Jeg ved, at dette er en gammel tråd, men jeg faldt lige over den, og jeg føler, at dette ikke er blevet forklaret fuldstændigt.
Der er en enorm forskel i SQL*Plus mellem betydningen af en /
og en ;
fordi de virker anderledes.
;
afslutter en SQL-sætning, hvorimod /
udfører hvad der er i den aktuelle "buffer". Så når du bruger en ;
og en /
sætningen udføres faktisk to gange.
Du kan nemt se det ved at bruge en /
efter at have kørt en erklæring:
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 dette tilfælde bemærker man faktisk fejlen.
Men forudsat at der er et SQL-script som dette:
drop table foo;
/
Og dette køres fra SQL*Plus, så vil dette være meget forvirrende:
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
/
er hovedsageligt påkrævet for at køre sætninger, der har indlejret ;
som CREATE PROCEDURE
,CREATE FUNCTION
,CREATE PACKAGE
sætninger og for enhver BEGIN...END
blokke.