Както @Pavel предостави, проверката <row-type> IS NOT NULL
не работи така, както изглежда очаквате. Връща TRUE
ако (и само ако) всяка отделна колона е NOT NULL
.
Тествайте специалната променлива FOUND
вместо това (като @Mike коментира):
CREATE OR REPLACE FUNCTION registration(wr text)
RETURNS integer AS
$rL$
...
SELECT * INTO rowt FROM email WHERE email_email = eml;
IF FOUND THEN
RAISE EXCEPTION 'email address, %, already registered.', eml;
END IF;
...
$rL$ LANGUAGE plpgsql;
Или можете да обърнете израза си в теста.
IF rowt IS NULL THEN
-- do nothing
ELSE
RAISE EXCEPTION 'email address, %, already registered.' , eml;
END IF;
Всеки съществуващ ред, който бихте намерили, съдържа поне една колона, която е NOT NULL
, следователно rowt IS NULL
връща само TRUE
ако не се намери нищо.
Свързани отговори с повече подробности:
- IS NOT NULL тестът за запис не връща TRUE, когато е зададена променлива
- Ограничение НЕ NULL върху набор от колони