Я знаю, что это старый поток, но я просто наткнулся на него, и я чувствую, что это не объяснено полностью.
В SQL * Plus существует огромная разница между значением функции /
и ;
, потому что они работают по-другому.
;
завершает инструкцию SQL, тогда как /
выполняет все, что находится в текущем «буфере». Поэтому, когда вы используете ;
и /
, оператор фактически выполняется дважды.
Вы можете легко увидеть, что с помощью /
после запуска инструкции:
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
.