Jak podał @Pavel, czek <row-type> IS NOT NULL
nie działa tak, jak się wydaje. Zwraca TRUE
jeśli (i tylko jeśli) każda kolumna jest NOT NULL
.
Przetestuj specjalną zmienną FOUND
zamiast tego (jak skomentował @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;
Lub możesz odwrócić swoją ekspresję w teście.
IF rowt IS NULL THEN
-- do nothing
ELSE
RAISE EXCEPTION 'email address, %, already registered.' , eml;
END IF;
Każdy istniejący wiersz, który można znaleźć, zawiera co najmniej jedną kolumnę, która jest NOT NULL
, dlatego rowt IS NULL
zwraca tylko TRUE
jeśli nic nie zostanie znalezione.
Powiązane odpowiedzi z większą ilością szczegółów:
- Test NIE JEST NULL dla rekordu nie zwraca TRUE, gdy zmienna jest ustawiona
- Ograniczenie NOT NULL na zbiorze kolumn