Como proporcionó @Pavel, el control <row-type> IS NOT NULL
no funciona como usted parece esperar. Devuelve TRUE
si (y solo si) todas las columnas es NOT NULL
.
Pruebe la variable especial FOUND
en cambio (como comentó @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;
O podrías invertir tu expresión en la prueba.
IF rowt IS NULL THEN
-- do nothing
ELSE
RAISE EXCEPTION 'email address, %, already registered.' , eml;
END IF;
Cualquier fila existente que encontraría contiene al menos una columna que es NOT NULL
, por lo tanto rowt IS NULL
solo devuelve TRUE
si no se encuentra nada.
Respuestas relacionadas con más detalles:
- La prueba NO ES NULO para un registro no devuelve VERDADERO cuando se establece la variable
- Restricción NOT NULL sobre un conjunto de columnas