如何验证作为参数PL/SQL给定的YYYYMMDD日期
我有一个SP,名为ADD_COMPLEX_SALE。它获取4个参数:custid、prod id、qty和date(varchar2) 我需要验证日期并检查其格式是否正确。它将作为YYYYMMDD发送到过程 这就是我到目前为止所做的:如何验证作为参数PL/SQL给定的YYYYMMDD日期,sql,oracle,validation,date,plsql,Sql,Oracle,Validation,Date,Plsql,我有一个SP,名为ADD_COMPLEX_SALE。它获取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 := CONV
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是mod rements而不是rem或!=或~=>=convert(varchar(10),pdate(),111)
似乎试图使用SQL Serverconvert
函数。这在Oracle中不起作用
我会做一些类似的事情
DECLARE
l_dt date;
BEGIN
l_dt := to_date( pdate, 'yyyymmdd' );
EXCEPTION
WHEN others
THEN
raise_application_error( -20001, pdate || ' is not a date in the format YYYYMMDD' );
END;
当然,如果您希望执行多个检查,以便在长度不正确时抛出不同的异常,或者添加一些检查以确保日期是合理的(即必须在过去100年内或未来不超过100年,等等)您可以在转换日期后执行此操作。我需要提前提出异常,如何将其合并到IF语句中?现在获取以下错误代码:添加复杂销售-客户ID:10产品ID:2001日期:20140301数量:60 ORA-20000:发生另一个错误ORA-01861:文字与表单不匹配在string@RietteJooste-当其他人时,应该有一个
。我正在考虑将字符串转换为数字而不是日期。您不应该将日期存储或传递为varchar
。将参数声明为date
是一种更干净的方法。我认为只有一个异常处理程序就足够了。
CREATE PROCEDURE DATECHECK(pdate VARCHAR2) AS
err_date EXCEPTION;
vdate DATE;
BEGIN
BEGIN
vdate := to_date(pdate,'yyyymmdd');
EXCEPTION
WHEN OTHERS THEN
RAISE err_date;
END;
EXCEPTION
WHEN err_date THEN
raise_application_error(-20090, 'DATE ERROR');
END;
CREATE PROCEDURE DATECHECK(pdate VARCHAR2) AS
err_date EXCEPTION;
vdate DATE;
BEGIN
BEGIN
vdate := to_date(pdate,'yyyymmdd');
EXCEPTION
WHEN OTHERS THEN
RAISE err_date;
END;
EXCEPTION
WHEN err_date THEN
raise_application_error(-20090, 'DATE ERROR');
END;