Знам, че това е стара тема, но току-що попаднах на нея и смятам, че не е обяснено напълно.
Има огромна разлика в SQL*Plus между значението на /
и ;
защото работят по различен начин.
;
завършва SQL израз, докато /
изпълнява всичко, което е в текущия "буфер". Така че, когато използвате ;
и a /
операторът всъщност се изпълнява два пъти.
Можете лесно да видите това, като използвате /
след изпълнение на изявление:
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
В този случай човек действително забелязва грешката.
Но ако приемем, че има SQL скрипт като този:
drop table foo;
/
И това се изпълнява от SQL*Plus, тогава това ще бъде много объркващо:
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
/
се изисква главно за изпълнение на изрази, които имат вграден ;
като CREATE PROCEDURE
,CREATE FUNCTION
,CREATE PACKAGE
изрази и за всеки BEGIN...END
блокове.