2

我们一直在研究一些遗留代码,并找到了检查 date(VARCHAR2) 是否以正确的格式“YYYY-MM-DD HH24:MI:SS”传递的函数。它使用简单的构造

function IS_CORRECT_TIMESTAMP(P_EVENT_TIMESTAMP varchar2)
    return number is
    V_TIMESTAMP timestamp;
  begin
    select TO_TIMESTAMP(NVL(P_EVENT_TIMESTAMP, '1'),
                        'YYYY-MM-DD HH24:MI:SS')
      into V_TIMESTAMP
      from DUAL;
    return 1;
  exception
    when others then
      return - 1;
  end;

问题是,当我传递例如“22-AUG-13”的值时,它不会引发任何异常。这可能是什么原因?

感谢您的想法。

4

1 回答 1

5

FX格式模型修饰符可用于要求字符串和格式模型之间的精确匹配:

select TO_TIMESTAMP(P_EVENT_TIMESTAMP, 'FxYYYY-MM-DD HH24:MI:SS')
  into V_TIMESTAMP
  from DUAL;

此外,您可以通过不查询DUAL表来防止上下文切换,以便将字符串转换为timestamp数据类型:

V_TIMESTAMP := TO_TIMESTAMP(P_EVENT_TIMESTAMP, 'FxYYYY-MM-DD HH24:MI:SS');
于 2013-08-22T10:09:47.687 回答