IF  ODR_KOJI_TBL.DATE_URIAGE <> Null の場合
    開始年月日 ≦ ODR_KOJI_TBL.DATE_URIAGE and
    終了年月日 ≧ ODR_KOJI_TBL.DATE_URIAGE
ELSE
 IF  ODR_KOJI_TBL.DATE_JUCHU <> Null の場合
        開始年月日 ≦ ODR_KOJI_TBL.DATE_JUCHU and
        終了年月日 ≧ ODR_KOJI_TBL.DATE_JUCHU
 ELSE
  IF  ODR_KOJI_TBL.DATE_MITUMORI <> Null の場合
            開始年月日 ≦ ODR_KOJI_TBL.DATE_MITUMORI and
            終了年月日 ≧ ODR_KOJI_TBL.DATE_MITUMORI
  ELSE
   IF  ODR_KOJI_TBL.DATE_MITUMORI_NOKI <> Null の場合
                開始年月日 ≦ ODR_KOJI_TBL.DATE_MITUMORI_NOKI and
                終了年月日 ≧ ODR_KOJI_TBL.DATE_MITUMORI_NOKI
   END-IF
  END-IF
 END-IF
END-IF

解决方案 »

  1.   

    Null 不要用<>, 用is null, is not null
    小日本的字看不懂,≧这些也是sql?
      

  2.   

    写存储过程当中,拼条件
    if ODR_KOJI_TBL.DATE_URIAGE  is not  Null then
       swhere:='開始年月日 ≦ ODR_KOJI_TBL.DATE_URIAGE and 終了年月日 ≧ ODR_KOJI_TBL.DATE_URIAGE ';
    elsif ODR_KOJI_TBL.DATE_JUCHU  is not  Null then
       swhere:='開始年月日 ≦ ODR_KOJI_TBL.DATE_JUCHU and 終了年月日 ≧ ODR_KOJI_TBL.DATE_JUCHU ';
    elsif ODR_KOJI_TBL.DATE_MITUMORI   is not  Null then
       swhere:='開始年月日 ≦ ODR_KOJI_TBL.DATE_MITUMORI and 終了年月日 ≧ ODR_KOJI_TBL.DATE_MITUMORI ';
    elsif ODR_KOJI_TBL.DATE_MITUMORI_NOKI    is not  Null then
       swhere:='開始年月日 ≦ ODR_KOJI_TBL.DATE_MITUMORI_NOKI  and 終了年月日 ≧ ODR_KOJI_TBL.DATE_MITUMORI_NOKI  ';
    end if;
    按照你写的逻辑,非空就换值可以不这样写,直接写在where条件中開始年月日 ≦ 
    nvl(ODR_KOJI_TBL.DATE_URIAGE,
       nvl(ODR_KOJI_TBL.DATE_JUCHU,
          nvl(ODR_KOJI_TBL.DATE_MITUMORI,
             nvl(ODR_KOJI_TBL.DATE_MITUMORI_NOKI,'')  --都不符合条件你取的值
             )
          )
       )
    and 終了年月日 ≧
    nvl(ODR_KOJI_TBL.DATE_URIAGE,
       nvl(ODR_KOJI_TBL.DATE_JUCHU,
          nvl(ODR_KOJI_TBL.DATE_MITUMORI,
             nvl(ODR_KOJI_TBL.DATE_MITUMORI_NOKI,'')  --都不符合条件你取的值
             )
          )
       )
      

  3.   

    where 
    开始年月日 >= nvl2(ODR_KOJI_TBL.DATE_URIAGE, ODR_KOJI_TBL.DATE_JUCHU, ODR_KOJI_TBL.DATE_MITUMORI_NOKI)
    and 
    终止年月日 <= nvl2(ODR_KOJI_TBL.DATE_URIAGE, ODR_KOJI_TBL.DATE_JUCHU, ODR_KOJI_TBL.DATE_MITUMORI_NOKI)
      

  4.   

    nvl2(ODR_KOJI_TBL.DATE_URIAGE, ODR_KOJI_TBL.DATE_JUCHU, ODR_KOJI_TBL.DATE_MITUMORI_NOKI)
    between 终止年月日 and 开始年月日
      

  5.   

    if then
    elsif then
    end if
      

  6.   

    DECODE函数相当于一条件语句(IF).它将输入数值与函数中的参数列表相比较,根据输入值返回一个对应值。函数的参数列表是由若干数值及其对应结果值组成的若干序偶形式。当然,如果未能与任何一个实参序偶匹配成功,则函数也有默认的返回值。区别于SQL的其它函数,DECODE函数还能识别和操作空值。 
        其具体的语法格式如下: 
        DECODE(input_value,value,result[,value,result…][,default_result]); 
       其中: 
          input_value    试图处理的数值。DECODE函数将该数值与一系列的序偶相比较,以决定最后的返回结果 
          value          是一组成序偶的数值。如果输入数值与之匹配成功,则相应的结果将被返回。 
                           对应一个空的返回值,可 以使用关键字NULL于之对应 
          result         是一组成序偶的结果值 
          default_result 未能与任何一序偶匹配成功时,函数返回的默认值     下面的例子说明了,如何读取用户CHECKUP表SEAPARK中的BLOOD_TEST_FLAG列下的项目,作为DECODE函数的实参支持值。 
         SELECT checkup_type, DECODE(blood_test_flag, 'Y','Yes', 'N','No', NULL,'None', 'Invalid') 
         FROM checkup; 
        这个SQL语句展示了DECODE函数的左右基础功能特征。函数的输入值时BLOOD_TEST_FLAG列的数据,如果该列的值是'Y',那么函数返回'YES;如果该列的值是NULL,那么函数返回'None';如果没有与任何一个序偶匹配成功,则表示该列当前值无效,函数返回'Invali'。