PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Защо IS NOT NULL е false при проверка на тип ред?

Както @Pavel предостави, проверката <row-type> IS NOT NULL не работи така, както изглежда очаквате. Връща TRUE ако (и само ако) всяка отделна колона е NOT NULL .

Тествайте специалната променлива FOUND вместо това (като @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;

Или можете да обърнете израза си в теста.

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

Всеки съществуващ ред, който бихте намерили, съдържа поне една колона, която е NOT NULL , следователно rowt IS NULL връща само TRUE ако не се намери нищо.

Свързани отговори с повече подробности:

  • IS NOT NULL тестът за запис не връща TRUE, когато е зададена променлива
  • Ограничение НЕ NULL върху набор от колони


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL:Изберете данни с лайк на полето за време

  2. Използване на pyspark за свързване с PostgreSQL

  3. Ще даде ли UUID като първичен ключ в PostgreSQL лоша производителност на индекса?

  4. Управление на роли и атрибути на роли в PostgreSQL

  5. Свързване с PostgreSQL в IRI Workbench