sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Por qué IS NOT NULL es falso al verificar un tipo de fila?

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