SQLPlus试图两次删除包

2 sql oracle sqlplus sql-drop

在SQLPlus中执行脚本时我遇到了一个问题:

script.sql包含以下行

@some_pkg.pks
@some_pkg.pkb

drop package some_pkg;
/
Run Code Online (Sandbox Code Playgroud)

打电话后

> sqlplus用户/密码@dbname @ script.sql

控制台中包含以下消息:

Package created.
Package body created.
Package dropped.

drop package some_pkg;
*
ERROR at line 1:
ORA-04043: object SOME_PKG does not exist
Run Code Online (Sandbox Code Playgroud)

请解释一下这里发生了什么.看起来包被丢弃了两次.有可能避免错误吗?

Cod*_*odo 7

SQLplus命令执行的规则基本上是:

  • 遇到分号时执行当前文本.因此,如果一行不以分号结尾,则继续收集当前文本.
  • 如果您遇到DECLAREBEGIN收集所有文本而不执行分号
  • 如果遇到斜杠(/),请执行收集的文本.

那么在你的情况下会发生的事情是,分号和斜杠都执行DROP语句.

要修复它,请删除斜杠.

如果你有一个PL/SQL块,你只需要斜杠,它总是带有一个END语句.使用分号代替其他所有内容.

注意:上述规则已经简化.它在实践中更复杂.

  • 是的我同意.但是作为编写一致代码并帮助您的眼睛发现错误的简单规则,我建议仅使用斜杠来表示PL/SQL块,否则使用半冒号. (2认同)