我在Oracle过程中使用诸如“ where 0 =0”之类的语句时有些困惑?有人可以澄清一下吗?即使我们进行动态选择,即使在查询中附加了实际条件,为什么还要添加此语句呢?条件会否影响结果集?..我经历了如何选择列包含字符串中任何单词的所有行?但我完全理解使用“ where 0= 0”的原因。有人可以给我使用这种条件的正确理由吗?
提前致谢..;)
使用动态sql时,可能需要添加额外的子句,具体取决于满足某些条件。1 = 1子句在查询中没有任何意义(除了始终满足),它的唯一用途是降低用于生成查询的代码的复杂性。
例如,此伪代码
DECLARE v_text VARCHAR2(2000) := 'SELECT * FROM table WHERE 1=1 '; BEGIN IF condition_a = met THEN v_text := v_text ||' AND column_1 = ''A'' '; END IF; IF condition_b = also_met THEN v_text := v_text ||' AND column_2 = ''B'' '; END IF; execute_immediate(v_text); END;
比下面的伪代码更简单,并且随着添加更多子句,它只会变得更加混乱。
DECLARE v_text VARCHAR2(2000) := 'SELECT * FROM table '; BEGIN IF condition_a = met THEN v_text := v_text ||' WHERE column_1 = ''A'' '; END IF; IF condition_b = also_met AND condition_a != met THEN v_text := v_text ||' WHERE column_2 = ''B'' '; ELSIF condition_b = also_met AND condition_a = met THEN v_text := v_text ||' AND column_2 = ''B'' '; END IF; execute_immediate(v_text); END;