SQLPlus尝试删除包两次
在SQLPlus中执行脚本时,我遇到了一个问题: script.sql包含以下行SQLPlus尝试删除包两次,sql,oracle,sqlplus,sql-drop,Sql,Oracle,Sqlplus,Sql Drop,在SQLPlus中执行脚本时,我遇到了一个问题: script.sql包含以下行 @some_pkg.pks @some_pkg.pkb drop package some_pkg; / 打完电话 >sqlplus用户/password@dbname@script.sql 控制台中有以下消息: Package created. Package body created. Package dropped. drop package some_pkg; * ERROR at line 1: O
@some_pkg.pks
@some_pkg.pkb
drop package some_pkg;
/
打完电话
>sqlplus用户/password@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
请解释一下这里发生了什么。看起来包裹被丢弃了两次。有可能避免错误吗?SQLplus命令执行的规则基本上是:
- 遇到分号时执行当前文本。因此,如果一行没有以分号结尾,则会继续收集当前文本
- 如果遇到
或DECLARE
,请收集所有文本,不要在分号上执行BEGIN
- 如果遇到斜杠(
),请执行收集的文本/
DROP
语句
要修复它,请删除斜杠
只有当您有一个PL/SQL块时才需要斜杠,它总是带有END
语句。其他所有内容都使用分号
注:以上规则已简化。实践中更为复杂。一些示例有助于理解规则:
一些_pkg.pks和一些_pkg.pkb的内容是什么?这是因为
/
再次运行最后一条语句。简短回答:不要在语句后使用/
,请参阅:或删除分号。。。斜杠本身仍然会在缓冲区中执行drop命令。(但要在代码中保持一致。)是的,我同意。但是,作为编写一致代码和帮助眼睛发现错误的简单规则,我建议只对PL/SQL块使用斜杠,否则使用分号。
begin
dbms_output.put_line('executed');
end;
/
begin
dbms_output.put_line('executed')
end
/
begin
dbms_output.put_line('executed');
end;
/
/
select 1 from dual
/
select 1 from dual;
select 1 from dual;
/