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

giới hạn giá trị của trường với giá trị từ bảng khác trước khi ghi

Bạn không cần UPDATE bên trong một trình kích hoạt. Bạn có thể gán giá trị cho NEW.votes_used

Sử dụng một cái gì đó như:

BEGIN
    IF (NEW.votes_used > (SELECT votes_available FROM vote_totals 
     WHERE vote_totals.user_id = NEW.user_id)) THEN
        NEW.votes_used := (SELECT votes_available FROM vote_totals 
         WHERE vote_totals.userID = NEW.user_id);
    END IF;
    RETURN NEW;
END;

Hoặc

BEGIN
    NEW.votes_used := LEAST(NEW.votes_used, (SELECT votes_available 
                                             FROM vote_totals 
                                             WHERE vote_totals.userID = NEW.user_id));
    RETURN NEW;
END;

Đây phải là BEFORE UPDATE kích hoạt để hoạt động. (Và như tất cả BEFORE UPDATE kích hoạt nó phải RETURN NEW ).

Nếu bạn muốn mô phỏng ràng buộc kiểm tra với trình kích hoạt - hãy thử một cái gì đó như:

BEGIN
    IF (NEW.votes_used > (SELECT votes_available  
                          FROM vote_totals 
                          WHERE vote_totals.user_id = NEW.user_id)) 
    THEN RAISE EXCEPTION 'Not enough votes';
    END IF;
    RETURN NEW;
END;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. chuyển đổi giá trị cột jsonb thành nhiều cột trong PostgreSQL

  2. currval vẫn chưa được xác định phiên này, làm thế nào để có được chuỗi nhiều phiên?

  3. Postgres thêm cột với các giá trị được tính toán ban đầu

  4. Postgres DB Trigger gọi Hàm Java

  5. Sqoop trên Dataproc không thể xuất dữ liệu sang định dạng Avro