【发布时间】:2013-11-18 10:25:34
【问题描述】:
如果我将输入输入为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;
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;
【问题讨论】:
-
请各位..请帮帮我..紧急..
-
解释你需要什么..你的问题不是很清楚..写下给定输入发生了什么以及预期的结果..你遇到问题的地方
-
你的异常逻辑有点奇怪——你为什么要引发一个 g_dateError,捕获它并抛出一个 g_dateInvalid 异常?这意味着永远无法访问 g_dateError 的外部异常块。
-
@FrankSchmitt 这正是 OP 在
v_inputdate is null时没有得到他期望的结果的原因。 -
当输入日期为空时我需要抛出两种不同类型的异常,说“应该给出强制输入日期”,另一种是当用户给出错误输入时说他“输入无效”请给出正确的输入”..