我有以下情况,我必须检查多个或条件,以检查本地varibale不应该等于A,B,C,D等。显然,真实的价值观与我在这里提到的不同。我想从下面或任何其他可能的方式知道哪一个是最好的:
IF(condition1 AND (myLocalVAr NOT IN ('A','B','C','D','E','F') ) ) THEN
----
--
END IF;
或
IF(condition1 AND (myLocalVAr <> 'A' AND myLocalVAr <> 'B' AND myLocalVAr <> 'C'--'D'--'E'--'F' --so on) ) ) THEN
----
--
END IF;
答案 0 :(得分:2)
在现实世界中,我们总是希望以简单自动的方式和方法进行思考和编码,如果我们无法实现目标,那么我们就必须寻求更复杂的解决方案。
现在让我们看看你的代码, 第一种方法更容易直接实现你的目标,如果A,B,C,D等的来源是来自表,我们可以直接写它:
myLocalVAr not in (select column_name from table_name)
这个工作正常,但是这种方法很容易处理任何新值,但是&#34;不在&#34;条款有缺点:
你必须确保子查询中的返回值没有任何单个空值,如果是,那么整个逻辑将为null,在这种情况下我们可以使用nvl函数处理它或消除使用where子句的空记录。
表现:&#34;不在&#34;当我们有一长串的值,我们用它来复制myLocalVAr时,子句并没有给我们提供良好的性能。所以我们在这里使用&#34;不存在&#34;代替。
你提到的第二种方法是不实用的,它很难实现,错误产生,以及将来难以管理新值,你必须自己添加新值并在每次需要比较时修改这些代码有新价值,所以我们不遵循这样的解决方案。