在我的项目中,我需要编写一个SQL查询,但我有一个问题。 例如,我有一千个机构,我需要为这些机构测试几个领域,但有时一些领域不存在,所以我的查询在结果中丢弃这个机构。 所以我想要做的是测试该机构是否存在该字段,如果是,则进行条件测试,否则通过该条件。
有没有办法简单地在' WHERE'部分就像这样:
where if(e.field1 exist) then e.field1='plop1' and if(e.field2 exist) then e.field2='plop2'
答案 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;
...