请考虑以下sqlplus脚本:
select * from dual;
select * from dual;
declare
foo number(10);
begin
select 'abc' from dual;
end;
如果我运行它:
sqlplus user/password@DB @myscript.sql
我得到这个输出:
D
-
X
D
-
X
7
而sqlplus挂起。...等待用户输入一些奇怪的原因。如果我按回车键,它会打印8。..9 ... 10等
看起来包含简单SQL的脚本很好,但如果我放进一个声明。.开始.. end sequence它不快乐。.
我错过了什么?
2条答案
按热度按时间3wabscal1#
PL/SQL块需要一个结束斜杠
/
字符,它告诉SQL*Plus现在应该运行这段代码。l5tcr1uw2#
在SQL中,
;
(在语句之后)或/
(在换行符上)用于终止语句。在PL/SQL中,
;
(在语句之后)用于终止语句,/
(在换行符上)用于终止PL/SQL块。您缺少块终止符;这意味着数据库不知道代码已经完成并准备执行,这就是为什么它挂起,因为它在等待你告诉它代码块已经完成。在换行符处输入
/
后,PL/SQL块将被执行。此时,您将得到一个异常,因为您正在使用SELECT ... FROM ...
,并且缺少一个INTO
子句,这在PL/SQL中是必需的。它应该是: