Plsql 返回PLS-00103的程序:遇到符号;EOF";怀孕时

Plsql 返回PLS-00103的程序:遇到符号;EOF";怀孕时,plsql,procedure,pls-00103,Plsql,Procedure,Pls 00103,我是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')

我是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.
PLS-00103:在期望一个
以下:;
当前删除存在于符号“;”之前
已替换为“文件结束”以继续。
我试着改变结局;结束它;希望它能解决一些问题(我所能想到的),但看不出哪里出了问题。有人能帮我吗


提前感谢:-)

您的程序中有几个错误

  • TIME
    datatype(在PL/SQL中没有这样的数据类型请参见,或者,您可以传递datetime数据类型:日期、时间戳、带时区的时间戳和带本地时区的时间戳) 您可以使用许多选项提取时间部分。例如:

    SELECT TO_CHAR(p_currDateTime, 'HH24:MI:SS') into p_currtime FROM DUAL;
    
  • 您正在尝试更新参数中的
    p_weekday
    p_currtime
    。这些参数用于将值传递给过程,而不是返回值

  • DBMS\u OUTPUT.PUT\u LINE
    只接受一个参数,因此可以像这样连接两个值,而不是
    DBMS\u OUTPUT.PUT\u LINE(p_工作日| |'-'| | p| currtime)

  • 如果不清楚你想通过这个程序实现什么目标,这会有很大帮助。基本上,我在这里看到的是,你需要在你的家庭作业中打印出一些程序的值。但是使用dbms_输出不会有任何好处。您需要将这些设置为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----------------------------------------------
    

    不幸的是,本例中的错误消息对您没有帮助。有两个问题:(1)
    TIME
    不是有效的数据类型,除非您自己定义了它;(2)
    DBMS\u输出。put\u行
    只接受一个参数。另一个问题是,您的参数在
    模式下使用默认的
    ,但您的过程正在尝试为其分配新值-这是不允许的。