PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Mengapa IS NOT NULL salah saat memeriksa jenis baris?

Seperti yang disediakan @Pavel, centang <row-type> IS NOT NULL tidak bekerja seperti yang Anda harapkan. Ini mengembalikan TRUE if (dan hanya jika) setiap kolom adalah NOT NULL .

Uji variabel khusus FOUND sebagai gantinya (seperti komentar @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;

Atau Anda bisa membalikkan ekspresi Anda dalam ujian.

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

Setiap baris yang ada yang Anda temukan berisi setidaknya satu kolom yang NOT NULL , oleh karena itu rowt IS NULL hanya mengembalikan TRUE jika tidak ada yang ditemukan.

Jawaban terkait dengan detail lebih lanjut:

  • IS NOT NULL tes untuk record tidak mengembalikan TRUE ketika variabel disetel
  • BUKAN NULL batasan pada sekumpulan kolom


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ulangi dimensi array di plpgsql

  2. Tentang dampak penulisan satu halaman penuh

  3. Konversi Django RawQuerySet ke Queryset

  4. Memutakhirkan ke PostgreSQL 11 dengan Replikasi Logis

  5. klien psql dapat menjadi papan catur sekarang ...