在sql查询中传递条件

时间:2012-11-16 10:37:24

标签: sql oracle

在我的项目中,我需要编写一个SQL查询,但我有一个问题。 例如,我有一千个机构,我需要为这些机构测试几个领域,但有时一些领域不存在,所以我的查询在结果中丢弃这个机构。 所以我想要做的是测试该机构是否存在该字段,如果是,则进行条件测试,否则通过该条件。

有没有办法简单地在' WHERE'部分就像这样:

where if(e.field1 exist) then e.field1='plop1' and if(e.field2 exist) then e.field2='plop2'

3 个答案:

答案 0 :(得分:2)

where (e.field1 is null or e.field1 = 'plop1')
    and (e.field2 is null or e.field2 = 'plop2')

答案 1 :(得分:0)

您可以为此目的使用合并功能:

SELECT COALESCE(e.field1, 'plop1') AS field1 FROM table e

这将使用String' plop1'替换字段的NULL值,从而为每条记录产生非空结果。

另见http://www.techonthenet.com/oracle/functions/coalesce.php

编辑:我假设字段" field1"存在于您的数据库架构中。否则,这是一个完全不同的问题,可能会在数据库/应用程序设计级别上解决。

答案 2 :(得分:-1)

你必须使用REF CURSOR

如下所示

TYPE curvar_type IS REF CURSOR;
   curvar    curvar_type;

    my_query_v   VARCHAR2(1000) := 'select * from something';
    where_v       VARCHAR2(100);
    BEGIN
       ...
       IF (abc is null)
           where_v := 'xyz=null';
       ELSE
           where_v := 'xyz='''||abc'' ';
       END IF;

        my_query_v := my_query_v || ' WHERE ' || where_v;
       ...