sql >> Databasteknik >  >> RDS >> PostgreSQL

Varför är IS NOT NULL falsk när man kontrollerar en radtyp?

Som @Pavel angav, är kryssrutan <row-type> IS NOT NULL fungerar inte som du verkar förvänta dig. Den returnerar TRUE om (och bara om) varje kolumn är NOT NULL .

Testa specialvariabeln FOUND istället (som @Mike kommenterade):

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;

Eller du kan invertera ditt uttryck i testet.

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

Alla befintliga rader du hittar innehåller minst en kolumn som är NOT NULL , därför ÄR rowt IS NULL returnerar endast TRUE om inget hittas.

Relaterade svar med mer information:

  • IS NOT NULL-testet för en post returnerar inte TRUE när variabeln är inställd
  • INTE NULL-begränsning över en uppsättning kolumner


  1. Rails 3, ActiveRecord, PostgreSQL - .uniq-kommandot fungerar inte?

  2. T-SQL delad sträng

  3. Hur COALESCE() fungerar i MariaDB

  4. oönskat inledande blanksteg i orakelnummerformat