Проверьте, не является ли элемент 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