oracle PLS-00103:当预期以下之一时,遇到符号“文件结束”:;

zengzsys  于 12个月前  发布在  Oracle
关注(0)|答案(6)|浏览(211)

我正在运行以下脚本-

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: 
;

bvjveswy

bvjveswy1#

在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;

字符串

os8fio9y

os8fio9y2#

PLS-00103总是意味着编译器出错了,因为我们犯了语法错误。如果消息文本说:You have made a syntax error, please check your code,那就太好了,可惜不是这样。
无论如何,在这种情况下,错误在于PL/SQL中的select语句必须填充一个变量。这与T-SQL的行为不同。因此,您需要定义一个与查询的投影匹配的变量,并选择INTO该变量。
Oracle的文档是全面的在线文档。你可以在这里找到关于将SQL查询集成到PL/SQL中的部分。我强烈建议你阅读它,以防止你的下一个问题。因为一旦你修复了简单的语法布卢默,你就会碰到TOO_MANY_ROWS(假设你有多个部门)。

tez616oj

tez616oj3#

在PL/SQL中,你不能只选择一些数据。结果应该去哪里?
您的选择是:

  • 删除BEGINEND并使用SQL*plus或其他可以运行SQL语句并在某处显示结果的工具运行SELECT。
  • 使用SELECT department_name INTO dep_name将结果放入PL/SQL变量(仅当SELECT返回单行时有效)
  • 使用SELECT department_name BULK COLLECT INTO dep_name_table将结果放入PL/SQL表(适用于多行)

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

2w3rbyxf

2w3rbyxf4#

为了避免too_many_rows问题,您可以使用游标,类似这样的东西(我还没有测试过这个,但是沿着这些行)

DECLARE 

 v_department egpl_department.department_name%type;

 cursor c_dept IS
  select department_name 
  into   v_department
  from   egpl_department 
  where  department_id in (select department_id from egpl_casemgmt_activity)
  order by department_name; 

BEGIN 

  OPEN c_dept;
  FETCH c_dept INTO v_department;
  CLOSE c_dept;

  -- do something with v_department

END;

字符串
这将把它在表中找到的第一个值放入v_department。使用ORDER BY子句确保返回的行是您需要的行,假设可能有2个不同的值。

3pvhb19x

3pvhb19x5#

大多数人不会认为电话是问题所在,
但这里有一个有趣的错误,在Oracle SQL开发人员,可能会模拟的问题..
inline notes throw the error..

exec dbowner.sp1 ( p1, p2, p3); -- notes about the fields

字符串
错误报告- ORA-06550:第1行,第362列:PLS-00103:当预期以下情况之一时,遇到符号“文件结束”:
开始情况声明结束异常退出后藤如果循环mod null杂注raise return select update while with << close current delete fetch lock insert open rollback savepoint set sql execute commit for all合并管道06550. 00000 -“行%s,列%s:\n%s”* 原因:通常是PL/SQL编译错误。* 操作:

exec dbowner.sp1 ( p1, p2, p3); 
-- notes about the fields


-- no inline notes:PL/SQL过程成功完成。

4sup72z8

4sup72z86#

DESCRIBE仅用于匿名PL/SQL块和嵌套PL/SQL块。
在Procedure块中“引入”一个新变量之前,你不需要使用DEQUE关键字,除非....这个过程是一个嵌套的PL/SQL块。
这是一个如何声明一个变量而不使用下面的“DESIGN”关键字的例子。
例如;

CREATE OR REPLACE PROCEDURE EXAMPLE( A IN NUMBER, B OUT VARCHAR2 )
IS  
  num1 number;
BEGIN  
  num1:=1;
  insert into a (year) values(7);    
END;

字符串
这个问题/答案解释得更好
create procedure in oracle

相关问题