我是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;希望它能解决某些事情(我能想到的全部)但却看不出有什么问题。有人可以帮我这个吗?
提前谢谢: - )
答案 0 :(得分:0)
您的程序中存在一些错误
TIME
数据类型(在PL / SQL中没有这样的数据类型,请参阅Documentation,或者,您可以传递datetime数据类型:DATE,TIMESTAMP,TIMESTAMP WITH TIME ZONE和TIMESTAMP WITH当地时区)
您可以使用许多选项提取时间部分。例如:
SELECT TO_CHAR(p_currDateTime, 'HH24:MI:SS') into p_currtime FROM DUAL;
您正在尝试更新p_weekday
&amp; p_currtime
是IN参数。这些参数用于将值传递给过程,而不是返回过程。
DBMS_OUTPUT.PUT_LINE
只接受一个参数,因此您可以将,
DBMS_OUTPUT.PUT_LINE(p_weekday||'-'||p_currtime);
而不是var myMap = [String: Set<String>]()
myMap["key"] = Set<String>()
var mySet = myMap["key"]
mySet?.insert("value")
//myMap["key"] = mySet
print("count:", myMap["key"]!.count)
。
醇>
如果不清楚你想通过这个程序实现什么,那将会有很大帮助
答案 1 :(得分: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----------------------------------------------