【发布时间】:2016-09-26 11:22:14
【问题描述】:
我有一个包含以下语句的 sql 文件:
BEGIN
if (&&masterKey = 1) then
shutdown immediate;
startup restrict;
end if;
END;
/
在另一个 SQL 文件 (defineVariables.sql) 中,我声明了变量 masterKey。
DEFINE masterKey = 0;
并在此处使用
导入该sql@defineVariables.sql
执行脚本时出现以下错误。我不确定是不是因为我使用了关闭语句?有人可以帮我解决这个问题吗?
错误信息:
SQL> BEGIN
2 if (&&masterKey = 1) then
3 shutdown immediate;
4 startup restrict;
5 end if;
6 END;
7 /
old 2: if (&&masterKey = 1) then
new 2: if (0 = 1) then
shutdown immediate;
*
ERROR at line 3:
ORA-06550: line 3, column 10:
PLS-00103: Encountered the symbol "IMMEDIATE" when expecting one of the
following:
:= . ( @ % ;
ORA-06550: line 5, column 1:
PLS-00103: Encountered the symbol "END" when expecting one of the following:
begin function pragma procedure subtype type <an identifier>
<a double-quoted delimited-identifier> current cursor delete
exists prior
【问题讨论】:
-
立即关闭不是 plsql 命令。这是一个 sqlplus 命令。
-
我认为你不能在同一个 plsql 块中同时使用关闭和启动。从您的代码中,一旦执行将立即关闭,整个数据库将关闭。之后的语句将不会执行。
-
@XING 在没有 BEGIN 和 END 块且没有 if 条件的情况下运行脚本没有任何问题。所以也许问题是 Rene 指出的语法不正确。但是有没有什么方法可以根据一个标志来选择执行这些语句?
-
我猜 Rene 用 flag 给了你答案。看看他的解决方案。同样如前所述,当您单独执行时,它被视为 sqplus 命令语句并且会执行但在块中它失败了
-
PL/SQL 完全在数据库内部执行,因此它无法自行关闭然后自行启动。这就是 PL/SQL 没有
shutdown命令的原因之一。
标签: sql oracle plsql syntax-error sqlplus