使用NVL的SQL SELECT for Cursor

时间:2017-10-09 16:23:32

标签: sql oracle

我正在尝试修改员工接口文件中使用的SELECT语句,因为它在通过员工时返回了一个错误,他们的END_DATE是......好'过时'。

我对此很陌生,所以为了跳过过时的Oracle用户,我觉得使用NVL表达式最好?然而,在研究之后,我只是没有把握这个概念,并且不确定它是否应该是我应该使用的。

以下是声明:

FROM    oaa.xxap_employee_interim ei,
                hr.per_all_people_f ppf,
                hr.per_all_assignments_f paf,
                hr.per_addresses pa,
                apps.fnd_user u
        WHERE   new_update = 'U'
        AND     ppf.person_type_id = 6
        AND     ei.employee_number = ppf.employee_number
        AND     ppf.effective_end_date >= SYSDATE
        AND     ppf.person_id = paf.person_id
        AND     paf.effective_end_date >= SYSDATE
        AND     ppf.person_id = pa.person_id
        AND     u.employee_id = ppf.person_id
        --AND       NVL(u.end_date, SYSDATE + 5);

同事也建议我使用“IS NULL”在这种情况下不正确。真的吗?如果是这样,为什么?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我猜你想要检查u.end_date是过去的日期还是非日期。在这种情况下,我会使用以下内容:

AND COALESCE(u.end_date, SYSDATE) < SYSDATE

Oracle的具体方法是

AND NVL(u.end_date, SYSDATE) < SYSDATE