Conforme fornecido pelo @Pavel, a verificação
<row-type> IS NOT NULL
não funciona como você parece esperar. Ele retorna TRUE
se (e somente se) todas as colunas é NOT NULL
. Teste a variável especial
FOUND
em vez disso (como @Mike comentou):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;
Ou você pode inverter sua expressão no teste.
IF rowt IS NULL THEN
-- do nothing
ELSE
RAISE EXCEPTION 'email address, %, already registered.' , eml;
END IF;
Qualquer linha existente que você encontrar contém pelo menos uma coluna que é
NOT NULL
, portanto rowt IS NULL
retorna apenas TRUE
se nada for encontrado. Respostas relacionadas com mais detalhes:
- O teste IS NOT NULL para um registro não retorna TRUE quando a variável é definida
- Restrição NOT NULL sobre um conjunto de colunas