我们一直在研究一些遗留代码,并找到了检查日期(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'时,它不会抛出任何异常。 这可能是什么原因?
感谢您的想法。
答案 0 :(得分: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');