PLS-00103:当遇到以下情况之一时遇到符号"文件结束":

Bha*_*hra 11 sql oracle plsql

我正在运行以下脚本 -

BEGIN
    select department_name 
    from egpl_department 
    where department_id in (select department_id 
                            from egpl_casemgmt_activity);
END ;
Run Code Online (Sandbox Code Playgroud)

得到了错误 -

PLS-00103: Encountered the symbol "end-of-file" when 
expecting one of the following: 
;
Run Code Online (Sandbox Code Playgroud)

die*_*ikh 15

在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; 
Run Code Online (Sandbox Code Playgroud)


Cod*_*odo 8

在PL/SQL中,您不能只选择一些数据.应该在哪里结果?

你的选择是:

  • 删除BEGINEND运行带有SQL*plus的SELECT或其他可以运行SQL语句并在某处显示结果的工具.

  • 使用SELECT department_name INTO dep_name把结果为PL/SQL变量(只适用,如果你的SELECT返回单行)

  • 使用SELECT department_name BULK COLLECT INTO dep_name_table把结果为PL/SQL表(适用于多行)

或者您可以描述您想要实现的目标以及您希望在什么环境中运行SQL或PL/SQL代码.


APC*_*APC 7

PLS-00103总是意味着编译器已经抛出,因为我们已经出现了语法错误.如果消息文本说的话,它会非常简洁:You have made a syntax error, please check your code但是它没有.

Oracle的文档是全面的在线文档.您可以在此处找到有关将SQL查询集成到PL/SQL中的部分.我恳请你阅读它,以防止你的下一个问题.因为一旦你修复了简单的语法bloomer,你就会遇到TOO_MANY_ROWS(假设你有多个部门).

  • 这个答案在 2020 年仍然相关。编译器会呕吐并抛出这个问题,但希望包含一行/位置来帮助调试。 (2认同)