PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Tại sao KHÔNG NULL sai khi kiểm tra một loại hàng?

Như @Pavel đã cung cấp, kiểm tra <row-type> IS NOT NULL không hoạt động như bạn mong đợi. Nó trả về TRUE nếu (và chỉ khi) mọi cột đơn lẻ NOT NULL .

Kiểm tra biến đặc biệt FOUND thay vào đó (như @Mike đã nhận xét):

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;

Hoặc bạn có thể đảo ngược biểu thức của mình trong bài kiểm tra.

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

Bất kỳ hàng hiện có nào bạn tìm thấy đều chứa ít nhất một cột NOT NULL , do đó rowt IS NULL chỉ trả về TRUE nếu không tìm thấy gì.

Các câu trả lời liên quan với nhiều chi tiết hơn:

  • Kiểm tra KHÔNG ĐẦY ĐỦ đối với một bản ghi không trả về TRUE khi biến được đặt
  • Ràng buộc NOT NULL trên một tập hợp các cột


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách kết nối Struts 2 với Hibernate và PostgreSQL

  2. MySQL và PostgreSQL cho các ứng dụng web

  3. Cài đặt PostgreSQL trên Ubuntu 18.04

  4. loại bỏ các giá trị mảng trùng lặp trong postgres

  5. Cách triển khai PostgreSQL khả dụng cao với Điểm cuối duy nhất cho WordPress