PLS-00221'to_date'不是一个过程或未定义的错误,并且转换日期由句点分隔

时间:2018-08-16 06:24:47

标签: plsql procedure

我想将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');是否可以用“ /”分隔?

1 个答案:

答案 0 :(得分:2)

正如错误消息已经指出的那样,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'