Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 输入为空时如何处理日期_Oracle_Date_Plsql_Null - Fatal编程技术网

Oracle 输入为空时如何处理日期

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;

如果我将输入设置为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;

我认为你目前的做法比实际需要的要复杂一些。没有必要再筑巢一个街区。我已经测试了以下各项,对我来说效果很好:

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时,我需要抛出两种不同类型的异常,表示应该给出强制输入日期,而当用户输入错误,表示输入无效,请输入正确。。