【问题标题】:How can i handle the date when the input is NULL输入为NULL时如何处理日期
【发布时间】: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 时没有得到他期望的结果的原因。
  • 当输入日期为空时我需要抛出两种不同类型的异常,说“应该给出强制输入日期”,另一种是当用户给出错误输入时说他“输入无效”请给出正确的输入”..

标签: oracle date plsql null


【解决方案1】:

我认为您目前的操作方式比实际需要的要复杂一些。没有必要嵌套另一个块。我已经测试了以下内容,对我来说效果很好:

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;
 /

用 null 测试得到错误 -20002,用 'text' 测试得到 -20001。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-17
    • 1970-01-01
    • 2017-06-25
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    • 2022-01-26
    • 2023-01-10
    相关资源
    最近更新 更多