Проверьте, не является ли элемент ISNULL [ Postgresql ]

Я пытаюсь реализовать функцию доступа 'isnull' в postgresql, эта функция принимает в качестве параметра выражение, и функция возвращает истину, если было принято значение null, или ложь, если она не равна нулю. Я знаю, что 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;

2 ответа

Решение

Если вы определите эти две функции, это будет работать для всех случаев:

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 могут быть встроенными.

Я получил это на работу

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
Другие вопросы по тегам