While executing scripts in SQLPlus I've encountered a problem:
script.sql contains the following lines
@some_pkg.pks
@some_pkg.pkb
drop package some_pkg;
/
After calling
> sqlplus user/password@dbname @script.sql
the following messages are in console:
Package created.
Package body created.
Package dropped.
drop package some_pkg;
*
ERROR at line 1:
ORA-04043: object SOME_PKG does not exist
Please, explain what's happening here. Looks like the package is being dropped twice. Is it possible to avoid the error?
The rules of SQLplus command execution basically are:
DECLARE
orBEGIN
, collect all the text and do not execute on semi-colons/
), execute the collected text.So what happens in your cases is, that both the semi-colon and the slash execute the
DROP
statements.To fix it, remove the slash.
You only need the slash if you have a block of PL/SQL, which always with an
END
statement. Use semicolons for everything else.Note: the above rules are simplified. It's more complex in practice.