Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql Postgres返回的行未通过非空检查_Postgresql - Fatal编程技术网

Postgresql Postgres返回的行未通过非空检查

Postgresql Postgres返回的行未通过非空检查,postgresql,Postgresql,我很想知道为什么下面的IF(previous\u foo.NOT NULL)条件失败,因为将此行更改为IF(previous\u foo.total NOT NULL)计算结果为true CREATE OR REPLACE FUNCTION foo_total(the_bar bar) RETURNS numeric LANGUAGE plpgsql STABLE AS $$ DECALRE previous_foo foo; BEGIN

我很想知道为什么下面的
IF(previous\u foo.NOT NULL)
条件失败,因为将此行更改为
IF(previous\u foo.total NOT NULL)
计算结果为true

CREATE OR REPLACE FUNCTION foo_total(the_bar bar)
 RETURNS numeric
 LANGUAGE plpgsql
 STABLE
AS $$
      DECALRE
        previous_foo foo;
      BEGIN
        previous_foo := foo_previous(the_bar);

        IF (previous_foo IS NOT NULL) THEN -- fails
        -- IF (previous_foo.total IS NOT NULL) -- works
          return previous_foo.total;
        END IF;
        RETURN NULL;
      END;
$$;
那么,
previous\u-foo
怎么可能为空,而
previous\u-foo.total
怎么可能不为空:/

之前的foo正在做类似的事情供参考

create or replace function previous_foo(the_bar bar) returns foo
    LANGUAGE sql STABLE
    AS $$
      SELECT foo.* FROM foo 
        WHERE -- conditions;
$$;
这符合和SQL标准:

如果表达式是行值表达式,则当行表达式本身为NULL或所有行字段为NULL时,is NULL为true;而当行表达式本身为非NULL且所有行字段为非NULL时,is NOT NULL为true

组合中的某些字段必须为空


这不是标准委员会关于无效的唯一奇怪裁决…

谢谢,是的,好的,这有点“道理”。该行中的某些字段为空。