PLS-00221 'to_date' 不是程序或未定义的错误,并转换以句点分隔的日期
Posted
技术标签:
【中文标题】PLS-00221 \'to_date\' 不是程序或未定义的错误,并转换以句点分隔的日期【英文标题】:PLS-00221 'to_date' is not a procedure or undefined error and converting dates separated by periodPLS-00221 'to_date' 不是程序或未定义的错误,并转换以句点分隔的日期 【发布时间】:2018-08-16 06:24:47 【问题描述】:我想将类型为 varchar2 的 IN 参数转换为日期,以便我可以在两个输入日期之间从数据库中提取数据。我有一个问题和一个问题。
问题是我收到错误
“PLS-00221:to_date 不是过程或未定义”
当我有以下代码时:
create or replace procedure display_users( pi_date1 in varchar2,
pi_date2 in varchar2,
po_userc out sys_refcursor) is
begin
if pi_date1 is not null then
to_date(pi_date1, 'DD/MM/YYYY HH24:MI:SS');
end if;
begin
open po_userc for
select ...
from ...
where ...
and ...
and t.inserted_date betweeen pi_date1 and pi_date2 ;
end;
end;
我对pl/sql过程不是很熟悉,我尝试了很多其他的方法来让它工作,但我无法做到。
问题是在数据库中我的日期是这样的:'16.08.2018 10:30:48'(我无法更改数据库中的数据格式)
日期部分用句点 (.) 分隔。 to_date(pi_date1, 'DD/MM/YYYY HH24:MI:SS');
会因为日期被“/”分隔而工作吗?
【问题讨论】:
试试这个 pi_date1 := to_date(pi_date1, 'DD/MM/YYYY HH24:MI:SS'); @Ovoxo 您无法将日期分配给 varchar2 @hotfix 那是我的错! 您的光标看起来还不太正确。inserted_date
是什么类型?为什么date1
和date2
是varchar2
类型?如果您将date1
转换为date
,您还应该将date2
转换为date
inserted_date 是日期类型,我被要求将 date1 和 date2 创建为 varchar2。我要转换他们两个我只是没有在这里发布。谢谢你们俩的帮助
【参考方案1】:
正如错误消息所说,to_date
不是一个过程。 to_date
是一个函数,函数总是返回一个值。您必须将此值分配给变量。
declare
v_date date;
begin
v_date := to_date(pi_date1, 'DD/MM/YYYY HH24:MI:SS');
end;
/
转换为日期时,您必须注意格式。日、月、年、时、分、秒之间有分隔符吗?如果是点 (.
),则必须将其指定为格式。
如果您的字符串如下所示:01.01.2000 01:01:01
那么你的格式必须是这样的:'DD.MM.YYYY HH24:MI:SS'
如果您的字符串如下所示:01/01/2000 01:01:01
那么你的格式必须是这样的:'DD/MM/YYYY HH24:MI:SS'
【讨论】:
以上是关于PLS-00221 'to_date' 不是程序或未定义的错误,并转换以句点分隔的日期的主要内容,如果未能解决你的问题,请参考以下文章
解决PLS-00221: 'FUN2' 不是过程或尚未定义 的总结
使用 StoredProcedureQuery 调用 Oracle 函数?