sql >> Databáze >  >> RDS >> PostgreSQL

Proč je při kontrole typu řádku IS NOT NULL false?

Jak uvedl @Pavel, zaškrtnutí <row-type> IS NOT NULL nefunguje, jak se zdá, že očekáváte. Vrací TRUE pokud (a pouze pokud) každý jeden sloupec je NOT NULL .

Otestujte speciální proměnnou FOUND místo toho (jako to komentoval @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;

Nebo můžete svůj výraz v testu obrátit.

IF rowt IS NULL THEN
   -- do nothing
ELSE 
   RAISE EXCEPTION 'email address, %, already registered.' , eml;
END IF;

Každý existující řádek, který byste našli, obsahuje alespoň jeden sloupec, který je NOT NULL , proto rowt IS NULL vrátí pouze TRUE pokud není nic nalezeno.

Související odpovědi s dalšími podrobnostmi:

  • Test IS NOT NULL pro záznam nevrací hodnotu TRUE, když je nastavena proměnná
  • NOT NULL omezení pro sadu sloupců


  1. PostgreSQL zástupný znak LIKE pro kterékoli ze seznamu slov

  2. Analyzujte json prostřednictvím json_table v oracle 18

  3. MySQL v cloudu – Online migrace z Amazon RDS na EC2 Instance:Část první

  4. Humanizované nebo přirozené třídění smíšených slovních a číselných řetězců