PL/SQL使用日期字段参数创建过程中的对象标识符无效



我是一个相当新的pl/sql,我正在尝试创建一个过程,该过程可以从输入中获取日期参数,从我正在处理的学生表中找到并更新匹配的联接日期行,但我似乎无法获得有效的日期,而且我不确定我是否通过输入正确配置了我的过程。如果您能提供帮助,我将不胜感激,这是我目前的代码。

CREATE OR REPLACE PROCEDURE dateChanger (p_join_date IN DATE) 
IS p_date DATE;
p_month VARCHAR2(3);
p_year VARCHAR2(4); 
p_change VARCHAR2(11); 
v_month VARCHAR2(3);
BEGIN
p_date := to_date(p_join_date, 'dd-mon-yyyy');
p_month := Extract(MONTH FROM p_date);
p_year := Extract(YEAR FROM p_date);
v_month := to_char(Extract(MONTH FROM student.join_date%TYPE), 'MON');
--expected result 01-(Month from p_date)-(Year from p_date) eg. 01-JUL-2021
p_change := '01-'+to_char(p_month, 'MON')+'-'+to_char(p_year, 'YYYY');-- date put back together
UPDATE Week03.t_student SET join_date = to_date(p_change, 'dd-mon-yyyy')
WHERE v_month = p_month; -- table updated where months match
RETURN(p_date || '-----' || p_change);
END;    
/
ACCEPT jDate Date PROMPT 'Please Enter a valid date as dd-MON-YYYY eg. 13-JUL-2021';
DECLARE
dc VARCHAR2(11);
l_date student.join_date%type := &jDate; -- input from user saved to date type variable
BEGIN
dc := DATECHANGER(l_date);
SELECT DATECHANGER(l_date) INTO dc from dual; 
END;
/

当我输入日期为"dd-mon-yyy"或"yyy-mon-dd"和许多其他变体时,我会得到一个pls 00905&00201错误如有任何帮助,不胜感激。日期输入似乎拒绝了我尝试过的所有变体。

来自文档:

日期

使回复成为有效的DATE格式。如果回复不是有效日期格式,ACCEPT会给出一条错误消息并再次提示。数据类型是CHAR。

这意味着在这种情况下,接受数据的结果是char格式。

您应该稍微更改一下代码。在不稳定的块中

l_date student.join_date%type := &jDate; => l_date varchar2(100) := '&jDate'

和程序中

(p_join_date IN DATE)  => (p_join_date in varchar2)

是的,对于未来可能需要完成与我类似任务的人,这里是我如何解决我的问题的,这要归功于@ArkadiuszŁukasiewicz

CREATE OR REPLACE PROCEDURE dateChanger (p_join_date IN DATE) 
BEGIN
UPDATE Week03.t_student SET join_date = trunc(join_date, 'MM');
END;
/
SELECT * FROM student;
BEGIN
dateChanger(to_date('2018-09-01', 'yyyy-mm-dd'));
END;
/