0

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

有没有办法像这样在“WHERE”部分简单地做到这一点:

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

3 回答 3

2
where (e.field1 is null or e.field1 = 'plop1')
    and (e.field2 is null or e.field2 = 'plop2')
于 2012-11-16T10:40:18.967 回答
0

为此,您可以使用 coalesce 函数:

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

这将用字符串“plop1”替换字段的 NULL 值,从而为每条记录生成非空结果。

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

编辑:我假设字段“field1”存在于您的数据库模式中。否则,这是一个完全不同的问题,可能已经在数据库/应用程序设计级别解决了。

于 2012-11-16T10:41:33.687 回答
-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;
       ...
于 2012-11-16T10:43:47.477 回答