Sql PLS-00103:遇到符号“;“文件结束”;当预期以下情况之一时:;
我正在运行以下脚本-Sql PLS-00103:遇到符号“;“文件结束”;当预期以下情况之一时:;,sql,oracle,plsql,Sql,Oracle,Plsql,我正在运行以下脚本- BEGIN select department_name from egpl_department where department_id in (select department_id from egpl_casemgmt_activity); END ; 并且得到了错误- PLS-00103: Encountered the symbol "end-of-file" when e
BEGIN
select department_name
from egpl_department
where department_id in (select department_id
from egpl_casemgmt_activity);
END ;
并且得到了错误-
PLS-00103: Encountered the symbol "end-of-file" when
expecting one of the following:
;
在PL/SQL块中,select语句应该有一个
into
子句:
DECLARE
v_department egpl_department.department_name%type;
BEGIN
select department_name
into v_department
from egpl_department
where department_id in (select department_id from egpl_casemgmt_activity);
-- Do something useful with v_department
END;
在PL/SQL中,不能只选择一些数据。结果会怎样 你的选择是:
- 删除
和BEGIN
,然后运行SELECT with SQL*plus或其他一些可以运行SQL语句并在某处显示结果的工具END
- 使用
将结果放入PL/SQL变量(仅当您的选择返回一行时有效)SELECT department\u name INTO dep\u name
- 使用
将结果放入PL/SQL表(适用于多行)SELECT department\u name BULK COLLECT INTO dep\u name\u table
或者,您可以描述您试图实现的目标以及希望在什么环境下运行SQL或PL/SQL代码。
PLS-00103
始终表示编译器已抛出,因为我们出现了语法错误。如果消息文本说:你犯了语法错误,请检查你的代码,那就太好了,可惜它没有
无论如何,在这种情况下,错误在于PL/SQL中的select语句必须填充一个变量。这与T-SQL的行为不同。因此,您需要定义一个与查询的投影匹配的变量,并选择该变量
Oracle的文档是全面的、在线的。您可以找到关于将SQL查询集成到PL/SQL的部分。我劝你读一读,以防你提出下一个问题。因为一旦你修复了简单的语法bloomer,你会碰到太多的行(假设你有多个部门)。为了避免太多行的问题,你可以使用一个光标,类似这样的东西(我没有测试过,但大致上是这样)
这将把它在表中找到的第一个值放入v_部门。使用ORDERBY子句确保返回的行是所需的行,假设可能有两个不同的值大多数人都不认为这个问题是个问题,
但Oracle Sql Developer中有一个有趣的bug,它可能会模拟这个问题
exec dbowner.sp1 ( p1, p2, p3); -- notes about the fields
错误报告-
ORA-06550:第1行第362列:
PLS-00103:在预期以下情况时遇到符号“文件结束”:
begin case为goto if loop mod声明结束异常退出
null pragma raise return select update with with with with with
这个答案在2020年仍然适用。编译器会呕吐并抛出这个,但希望包括一行/位置来帮助调试。
exec dbowner.sp1 ( p1, p2, p3); -- notes about the fields
exec dbowner.sp1 ( p1, p2, p3);
-- notes about the fields