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

batasi nilai bidang dengan nilai dari tabel lain sebelum menulis

Anda tidak perlu UPDATE di dalam pemicu. Anda dapat menetapkan nilai ke NEW.votes_used

Gunakan sesuatu seperti:

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;

Atau

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

Ini harus berupa BEFORE UPDATE pemicu untuk bekerja. (Dan karena semua BEFORE UPDATE pemicunya harus RETURN NEW ).

Jika Anda ingin meniru batasan pemeriksaan dengan pemicu - coba sesuatu seperti:

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. Bagaimana cara mengambil komentar dari database PostgreSQL?

  2. pilih radius dari ST_MinimumBoundingRadius

  3. Ciutkan beberapa baris array jika array tumpang tindih

  4. Cara membuat tabel berdasarkan kueri dan baris yang diambil dari pernyataan pilih

  5. Rel 5:mengelompokkan catatan berdasarkan bidang DateTime dalam tampilan hierarki