oracle数据库中where 1 = 1的妙用

where 1 = 1是怎么用的,首先看一段代码,这段代码是我在ebs的总账模块中随便找的一段,以v_开头的都是会给定的变量,不用纠结,大概看看样式就好:

SELECT 1
  FROM gl_je_lines gjl
 WHERE gjl.ledger_id = v_ledger_id
   AND gjl.reference_5 = v_batch_name
UNION ALL
SELECT 1
  FROM gl_interface gi
 WHERE 1 = 1
   AND gi.ledger_id = v_ledger_id
   AND gi.reference25 = v_batch_name
   AND nvl(gi.status,
           'NEW') <> 'PROCESSED';

where 1 = 1表示的就是true,就是一个为真的条件,这种用法多用在需要用户输入判断条件的地方,比如说在开发报表的时候,用户会自己输入相应的条件判断。如果,没有where 1= 1,那么只有当where后面的判断语句能够满足的时候才能正常执行;但是,假如后面的判断没有满足,这个时候where后面就没有判断,类型于select * from t_table where,而如果有了where 1 =1 这个条件,那么这个时候就类型于select * from t_table where 1 = 1,这个时候后面就有了一个表示true的条件,执行的时候就不会出现问题。

所以,在做开发的时候,要注意别忘了适当的加上这个条件,如果不知道什么时候该加,那就什么时候都加上吧,这样虽然挺笨,但是也没错。补充一下,至于where 1 = 0的应用,可以用来获取表的结构,如下:

CREATE TABLE t_a
 AS 
 SELECT *
  FROM t_b
 WHERE 1 = 0;

使用where 1 = 0可以非常方便的获取表结构,去除表中的记录数据。

2014-11-04补充:

在一个SQL语句中,由于from子句是必需的,它总是被第一个评估的子句。如果指定了where子句,那么from子句的评估结果将用于where子句;如果没有指定where子句,那么from子句的评估结果将用于下一个指定的子句,例如,group by子句或having子句。在表达式中的最后一个子句被评估完之后,它的结果将用于select子句。在评估完select子句后,将评估order by子句。

本文标题:oracle数据库中where 1 = 1的妙用

本文链接:http://yedward.net/?id=85

本文版权归作者所有,欢迎转载,转载请以文字链接的形式注明文章出处。

相关文章