0

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

基本上像下面这样..如果它为空,我希望它跳过对名称的检查。下面的行应该工作吗?还是我搞砸了。谢谢。

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 {...}
4

1 回答 1

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)
)

但我真的建议回到绘图板上来了解数据的要求和完整性。

于 2013-02-13T23:25:42.670 回答