2
IF (previous_foo.total IS NOT NULL)
으로 변경하면 true가 평가되는 이유에서 IF (previous_foo IS NOT NULL)
조건이 아래에서 실패하는 이유를 알고 싶습니다. Postgres가 반환 한 행이 null이 아닙니다.
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_foo
널 (null) 일 수있다, 그러나
previous_foo.total
가 null이 될 수 없습니다 :/
이전 foo는이 같은 일을하고있다 참고
create or replace function previous_foo(the_bar bar) returns foo
LANGUAGE sql STABLE
AS $$
SELECT foo.* FROM foo
WHERE -- conditions;
$$;
감사합니다. 그렇습니다. 이것은 "감각적"입니다. 해당 행의 일부 필드는 null입니다. – Tim