Oracle 输入为空时如何处理日期
如果我将输入设置为06/2007,则工作正常 给出2007/06显示无效输入-罚款 NULL“nothing”表示它已提供强制输入。但它给出的是错误的无效输入。我如何处理这两种情况Oracle 输入为空时如何处理日期,oracle,date,plsql,null,Oracle,Date,Plsql,Null,如果我将输入设置为06/2007,则工作正常 给出2007/06显示无效输入-罚款 NULL“nothing”表示它已提供强制输入。但它给出的是错误的无效输入。我如何处理这两种情况 PROCEDURE validateDate(v_InputDate IN VARCHAR2) is ErrorMSG VARCHAR2(1000); v_tmpDate varchar2(20); g_dateInvalid EXCEPTION; g_dateError EXCEPTION;
PROCEDURE validateDate(v_InputDate IN VARCHAR2) is
ErrorMSG VARCHAR2(1000);
v_tmpDate varchar2(20);
g_dateInvalid EXCEPTION;
g_dateError EXCEPTION;
g_ErrorCode NUMBER;
BEGIN
dbms_output.put_line('Input date is' || v_InputDate);
BEGIN
IF v_InputDate IS NULL THEN
RAISE g_dateError;
ELSIF v_InputDate IS NOT NULL THEN
v_tmpDate := to_date(v_InputDate,
'MM/YYYY');
dbms_output.put_line('Converted date is' || v_tmpDate);
END IF;
EXCEPTION
WHEN OTHERS THEN
RAISE g_dateInvalid;
END;
EXCEPTION
WHEN g_dateError THEN
g_ErrorCode := -20002;
ErrorMSG := 'Mandatory input cannot be null. Enter a valid date in MMYYYY fromat';
raise_application_error(g_ErrorCode,
ErrorMSG);
WHEN g_dateInvalid THEN
g_ErrorCode := -20001;
ErrorMSG := 'Invalid DATE should be in MMYYYY format. Please verify. ';
raise_application_error(g_ErrorCode,
ErrorMSG);
END validateDate;
我认为你目前的做法比实际需要的要复杂一些。没有必要再筑巢一个街区。我已经测试了以下各项,对我来说效果很好:
CREATE OR REPLACE PROCEDURE validateDate(
v_InputDate IN VARCHAR2
)
IS
v_tmpDate varchar2(20);
g_dateError EXCEPTION;
BEGIN
dbms_output.put_line('Input date is' || v_InputDate);
IF v_InputDate IS NULL THEN
RAISE g_dateError;
ELSE
v_tmpDate := to_date(v_InputDate, 'MM/YYYY');
dbms_output.put_line('Converted date is' || v_tmpDate);
END IF;
EXCEPTION
WHEN g_dateError THEN
raise_application_error(-20002, 'Mandatory input cannot be null. Enter a valid date in MMYYYY fromat');
WHEN OTHERS THEN
raise_application_error(-20001, 'Invalid DATE should be in MMYYYY format. Please verify. ');
END validateDate;
/
测试为空,错误为-20002,测试为“文本”,错误为-20001。各位,请帮帮我。情况紧急。请说明您需要什么。。你的问题不太清楚。。写下给定输入发生的情况以及预期的结果。。当您面临问题时,您的异常逻辑有些奇怪-为什么要引发g_dateError,捕获它并抛出g_dateInvalid异常?这意味着永远无法到达g_dateError的外部异常块。@FrankSchmitt,这正是为什么当v_inputdate为null时OP没有得到他期望的结果的原因。当输入日期为null时,我需要抛出两种不同类型的异常,表示应该给出强制输入日期,而当用户输入错误,表示输入无效,请输入正确。。