返回 PLS-00103 的过程:预期时遇到符号“EOF”
Posted
技术标签:
【中文标题】返回 PLS-00103 的过程:预期时遇到符号“EOF”【英文标题】:Procedure returning PLS-00103: Encountered the symbol "EOF" when expecting 【发布时间】:2015-11-27 04:52:00 【问题描述】:我是 PL/SQL 的新手,正在做一个家庭作业问题,我需要编写一个基于星期几/时间返回错误消息的过程,但在我到达那一点之前我被困在一个基本的事情上:
我写了以下内容:
CREATE OR REPLACE PROCEDURE
SECURE_IT
(p_weekday NUMBER,
p_currtime TIME)
IS
BEGIN
select to_char(current_timestamp,'D')
, to_char(current_timestamp,'HH24:MI')
into p_weekday, p_currtime
from dual;
DBMS_OUTPUT.PUT_LINE(p_weekday,p_currtime);
END;
我认为我所有的 ; 都已到位,看不出这之间有什么区别,书中的代码和我在网上找到的代码,但它仍然返回此错误:
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the
following: ; <an identifier> <a double-quoted delimited-identifier>
current delete exists prior <a single-quoted SQL string> The symbol ";"
was substituted for "end-of-file" to continue.
我尝试改变 END; END SECURE_IT;希望它能解决一些问题(我能想到的),但看不出有什么问题。有人可以帮我解决这个问题吗?
提前谢谢你:-)
【问题讨论】:
不幸的是,这种情况下的错误消息对您没有帮助。有两个问题:(1)TIME
不是一个有效的数据类型,除非你自己定义了它; (2)DBMS_OUTPUT.put_line
只接受一个参数。
另一个问题是您的参数使用默认的IN
模式,但您的程序正在尝试为它们分配新值 - 这是不允许的。
【参考方案1】:
您的程序中有几个错误
TIME
数据类型(在 PL/SQL 中没有这样的数据类型,请参阅 Documentation,或者,您可以传递日期时间数据类型:DATE、TIMESTAMP、TIMESTAMP WITH TIME ZONE 和 TIMESTAMP WITH LOCAL TIME ZONE)
您可以使用许多选项提取时间部分。例如:
SELECT TO_CHAR(p_currDateTime, 'HH24:MI:SS') into p_currtime FROM DUAL;
您正在尝试更新 p_weekday
和 p_currtime
,它们是 IN 参数。这些参数用于向过程传递值,而不是返回值。
DBMS_OUTPUT.PUT_LINE
只接受一个参数,因此您可以像这样连接两个值而不是 ,
:DBMS_OUTPUT.PUT_LINE(p_weekday||'-'||p_currtime);
如果不清楚你想通过这个过程实现什么,这将有很大帮助
【讨论】:
【参考方案2】:基本上我可以在这里看到的是,作为作业的一部分,您需要打印一些有价值的程序。但是使用 dbms_output 不会有任何好处。您需要将这些设置为 OUT 参数才能在任何地方使用这些值。
CREATE OR REPLACE PROCEDURE SECURE_IT(
p_weekday OUT VARCHAR2,
p_currtime OUT VARCHAR2)
IS
BEGIN
p_weekday := TO_CHAR(CURRENT_TIMESTAMP,'D');
p_currtime:= TO_CHAR(CURRENT_TIMESTAMP,'HH24:MI');
DBMS_OUTPUT.PUT_LINE(p_weekday||' '||p_currtime);
END;
-----------------------------EXECUTE--------------------------------------------
var week VARChaR2(100);
var curtime VARChaR2(100);
EXEC SECURE_IT(:week,:curtime);
print week;
print curtime;
-------------------------------OUTPUT--------------------------------------------
WEEK
-
6
CURTIME
-----
06:12
-------------------------------OUTPUT----------------------------------------------
【讨论】:
以上是关于返回 PLS-00103 的过程:预期时遇到符号“EOF”的主要内容,如果未能解决你的问题,请参考以下文章
错误:PLS-00103:在预期以下情况之一时遇到符号“AS”:返回
错误:PLS-00103:在预期以下情况之一时遇到符号“)”