0

我正在尝试在 postgresql 中实现访问函数“isnull”,该函数将表达式作为参数,如果传递了 null,则该函数返回 true,如果不为 null,则返回 false。我知道 postgres 有 'IS NULL' 和 'NOT NULL' 关键字,但是当我将字符串或空值本身传递给函数时,我不断收到多态错误,因为它们都是未知类型。

此方法必须使用函数来完成。

到目前为止我所拥有的:

CREATE OR REPLACE FUNCTION isnull( anyelement ) RETURNS anyelement as $$
    BEGIN
        IF $1 IS NULL THEN RETURN TRUE;
        ELSE RETURN FALSE;
        END IF;
    END
    $$LANGUAGE plpgsql;
4

2 回答 2

1

我得到了这个工作

CREATE OR REPLACE FUNCTION isnull( anyelement ) RETURNS boolean as $$
BEGIN
    RETURN $1 IS NULL;
END
$$LANGUAGE plpgsql;

测试:

CREATE TEMP TABLE test(a int, b int);
INSERT INTO test VALUES (1, null), (2, null);
SELECT isnull(a), isnull(b) FROM test;

给出:

 isnull | isnull
--------+--------
 f      | t
 f      | t
于 2016-10-06T17:12:08.530 回答
1

如果您定义这两个函数,它将适用于所有情况:

CREATE OR REPLACE FUNCTION isnull(anyelement) RETURNS boolean
   LANGUAGE sql IMMUTABLE AS 'SELECT $1 IS NULL';

CREATE OR REPLACE FUNCTION isnull(unknown) RETURNS boolean
   LANGUAGE sql IMMUTABLE AS 'SELECT $1::text IS NULL';

另一个优点是可以内联此类 SQL 函数。

于 2016-10-07T08:21:58.813 回答