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.   

    写存储过程当中,拼条件
    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;
    按照你写的逻辑,非空就换值可以不这样写開始年月日 ≦ 
    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,'')  --都不符合条件你取的值
             )
          )
       )