0

我是 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;希望它能解决一些问题(我能想到的),但看不出有什么问题。有人可以帮我解决这个问题吗?

先感谢您 :-)

4

2 回答 2

0

基本上我在这里看到的是你需要打印一些有价值的程序作为你作业的一部分。但是使用 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----------------------------------------------
于 2015-11-27T06:15:31.183 回答
0

您的程序中有几个错误

  1. TIME数据类型(在 PL/SQL 中没有这样的数据类型,请参阅文档,或者,您可以传递日期时间数据类型:DATE、TIMESTAMP、TIMESTAMP WITH TIME ZONE 和 TIMESTAMP WITH LOCAL TIME ZONE)您可以使用许多选项提取时间部分。例如:

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

  3. DBMS_OUTPUT.PUT_LINE只接受一个参数,因此,您可以像这样连接两个值:DBMS_OUTPUT.PUT_LINE(p_weekday||'-'||p_currtime);

如果不清楚您要通过此过程实现什么,这将有很大帮助

于 2015-11-27T05:30:58.527 回答