存储过程PLSQL中的条件选择?

时间:2013-02-13 23:20:44

标签: oracle plsql

我已经创建了一个存储过程来搜索员工姓名,但是我希望它是开放式的,以便用户可以插入名字或姓氏,或者根本没有名字......只是想知道如何为此构建逻辑

基本上就像下面的内容..我希望它跳过检查名称,如果它是空的。下面的线应该工作吗?或者我搞砸了。感谢。

search_employe(name, type)

SELECT * FROM employee_table e
WHERE e.type = type
AND IF name is not null THEN e.FNAME = name OR e.LName = name END IF
AND {...}

1 个答案:

答案 0 :(得分:1)

选择不需要任何plsql,但原始帖子谈到'插入',所以可能需要一些澄清 - 你的意思是,传递参数?

SELECT * FROM employee_table e
WHERE e.type = type
AND (name is null OR e.FNAME = name OR e.LName = name)

我认为拥有一个存储过程,调用者传递一个名称要匹配,但是你也要返回任何没有注册名字的员工,并认为匹配是非常有意义/非常混乱的。 。如果你真的想要返回这些令人困惑的数据(QA将有一个实地日),那么就可以完成:

SELECT * FROM employee_table e
WHERE e.type = type
AND 
(
    -- matching names, or the value was passed in null
    (name is null OR e.FNAME = name OR e.LName = name)
    OR
    -- value passed in, but the employee has no registered name
    (name is not null AND e.FNAME is null AND e.LName is null)
)

但我真的建议这可以追溯到绘图板,以了解数据的要求和完整性。