在预期以下情况之一时遇到符号“文件结尾”

Posted

技术标签:

【中文标题】在预期以下情况之一时遇到符号“文件结尾”【英文标题】:Encountered the symbol "end-of-file" when expecting one of the following 【发布时间】:2019-04-20 19:56:51 【问题描述】:

我正在尝试在 plsql 中打印斐波那契数列

这是程序

CREATE OR REPLACE PROCEDURE fibos(n IN number) IS
DECLARE  
first number := 0; 
second number := 1; 
temp number;   
i number; 
BEGIN
dbms_output.put_line('Series:'); 
dbms_output.put_line(first); 
dbms_output.put_line(second); 
for i in 2..n 
loop 
temp:=first+second; 
first := second; 
second := temp; 
dbms_output.put_line(temp); 
END loop; 
END; 
/

Warning: Procedure created with compilation errors.

这是我调用程序的地方:

DECLARE
a number := &a;
BEGIN
fibos(a);
/

这是我遇到的错误

fibos(a); * 第 4 行的错误: ORA-06550:第 4 行,第 9 列: PLS-00103:在期待其中一个时遇到符号“文件结尾” 下列的: begin case 为 goto 声明 end 异常退出 if loop mod null pragma raise return select update while with

【问题讨论】:

Oracle 文档全面、在线且免费。它有大量有效的 PL/SQL 语法示例。例如,here is the section on CREATE PROCEDURE。我建议您将其添加为书签,因为您解决自己的语法问题比在这里发布所有代码并要求我们为您调试它更快。 【参考方案1】:

删除CREATE PROCEDURE 语句中的DECLARE 并将END; 添加到调用它的匿名块中。

CREATE OR REPLACE PROCEDURE fibos(n IN number) IS
first number := 0; 
second number := 1; 
temp number;   
i number; 
BEGIN
dbms_output.put_line('Series:'); 
dbms_output.put_line(first); 
dbms_output.put_line(second); 
for i in 2..n 
loop 
temp:=first+second; 
first := second; 
second := temp; 
dbms_output.put_line(temp); 
END loop; 
END; 
/

DECLARE
a number := &a;
BEGIN
fibos(a);
END;
/

db<>fiddle

【讨论】:

以上是关于在预期以下情况之一时遇到符号“文件结尾”的主要内容,如果未能解决你的问题,请参考以下文章

遇到符号“文件结尾” - plsql

PLS-00103:在预期以下情况之一时遇到符号“TEST_PKG”:;

在预期以下情况之一时遇到符号“INTO”

错误:PLS-00103:在预期以下情况之一时遇到符号“)”

为啥我会收到此错误? PLS-00103:在预期以下情况之一时遇到符号“CREATE”:

PLS-00103:在预期以下情况之一时遇到符号“END”