sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvorfor er IS NOT NULL falsk, når du tjekker en rækketype?

Som @Pavel har angivet, er markeringen <row-type> IS NOT NULL virker ikke som du ser ud til at forvente. Det returnerer TRUE hvis (og kun hvis) hver enkelt kolonne er NOT NULL .

Test den specielle variabel FOUND i stedet (som @Mike kommenterede):

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 kunne invertere dit udtryk i testen.

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

Enhver eksisterende række, du ville finde, indeholder mindst én kolonne, der er NOT NULL , derfor ER rowt IS NULL returnerer kun TRUE hvis intet er fundet.

Relaterede svar med flere detaljer:

  • IS NOT NULL-testen for en post returnerer ikke TRUE, når variabel er indstillet
  • IKKE NULL-begrænsning over et sæt kolonner


  1. Hvordan IKKE RLIKE virker i MariaDB

  2. SQLSTATE[HY093]:Ugyldigt parameternummer:parameter blev ikke defineret

  3. Udvidelse af brugen af ​​DBCC CLONEDATABASE

  4. phpMyBackupPro – Et webbaseret MySQL-sikkerhedskopieringsværktøj til Linux