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

Oracle 存储过程PLSQL中的条件选择?,oracle,plsql,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 =

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

基本上如下所示。。如果它为空,我希望它跳过名称检查。下面这行行行吗?还是我搞砸了。谢谢

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

选择不需要任何plsql,但原始帖子谈到了“插入”,因此可能需要一些澄清-您的意思是,传递参数吗

SELECT * FROM employee_table e
WHERE e.type = type
AND (name is null OR e.FNAME = name OR e.LName = name)
<> P>我认为,如果有一个存储过程,调用方以一个匹配的名称通过,这是没有什么意义的/非常令人困惑的,但是你也要归还任何没有注册的名字的雇员,并认为这是一个匹配。如果您真的想返回这些令人困惑的数据(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)
)

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

Hm,但是如果名称不为空,并且名字/姓氏未知,该怎么办?您如何/为什么要存储名字和姓氏未知的员工?使用和/或条件的相同技术在适当编写时也会起作用,在查询中不需要IF语句(或者更准确地说是case语句)。如果您有员工ID但没有姓名,那么假设您可以根据搜索类型进行多个选择。哇哦,澄清一下,我的意思是,如果您不知道他们的姓名,但有其他标准,如开始日期/员工id。它不会返回所有记录,因为这会导致问题。如果您不知道它们的名称,并发送一个空名称,那么在OR子句中该名称为null=true,整个parens logic=true意味着不会根据发送的空值删除行。