我正在运行以下脚本-
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:
;
型
6条答案
按热度按时间bvjveswy1#
在PL/SQL块中,select语句应该有一个
into
子句:字符串
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(假设你有多个部门)。
tez616oj3#
在PL/SQL中,你不能只选择一些数据。结果应该去哪里?
您的选择是:
BEGIN
和END
并使用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代码。
2w3rbyxf4#
为了避免too_many_rows问题,您可以使用游标,类似这样的东西(我还没有测试过这个,但是沿着这些行)
字符串
这将把它在表中找到的第一个值放入v_department。使用ORDER BY子句确保返回的行是您需要的行,假设可能有2个不同的值。
3pvhb19x5#
大多数人不会认为电话是问题所在,
但这里有一个有趣的错误,在Oracle SQL开发人员,可能会模拟的问题..
inline notes throw the error..
字符串
错误报告- 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编译错误。* 操作:
型
-- no inline notes:PL/SQL过程成功完成。
4sup72z86#
DESCRIBE仅用于匿名PL/SQL块和嵌套PL/SQL块。
在Procedure块中“引入”一个新变量之前,你不需要使用DEQUE关键字,除非....这个过程是一个嵌套的PL/SQL块。
这是一个如何声明一个变量而不使用下面的“DESIGN”关键字的例子。
例如;
字符串
这个问题/答案解释得更好
create procedure in oracle