【发布时间】:2015-09-06 05:33:17
【问题描述】:
我有一个名为 ADD_COMPLEX_SALE 的 SP。它有 4 个参数:custid、prod id、qty 和 date(varchar2)。
我需要验证日期并检查其格式是否正确。它以 YYYYMMDD 的形式发送到过程。
这是我目前所拥有的:
IF (LENGTH(pdate) != 8) THEN
raise_application_error (-20093,' Date not valid');
ELSIF (LENGTH(pdate) = 8)THEN
vDATE := CONVERT(VARCHAR(10), pdate(), 111) AS [YYYY/MM/DD];
END IF;
IF (pdate != 'YYYY/MM/DD') THEN
raise_application_error (-20093,' Date not valid');
END IF;
基本上,这个想法也将其转换为“真实”日期格式,以便我可以确定它的格式正确。除了我得到这个错误。 仍然是非常新的 pl/sql,因此我们将不胜感激。
错误(42,49):PLS-00103:在预期以下情况之一时遇到符号“AS”:。 ( * % & = - + ; at in is mod rest not rem or != or ~= >= and or like2 like4 likec between || multiset member submultiset
更新:
将代码更改为以下内容:
vDATE := TO_DATE(pdate, 'yyyymmdd');
IF (pdate != vDATE) THEN
raise_application_error (-20093,' Date not valid');
END IF;
IF (LENGTH(vDATE) != 8) THEN
raise_application_error (-20093,' Date not valid');
END IF;
现在出现这个错误:
ORA-20000:发生另一个错误 ORA-01861:文字与格式字符串不匹配
编辑:上次更新错误是由于参数为 varchar2 而我忘记在转换完成后插入 vDATE 而不是 pdate。
【问题讨论】:
-
您不应将日期存储或传递为
varchar。将参数声明为date是一种更简洁的方法
标签: sql oracle validation date plsql