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

Postgres chèn hoặc cập nhật kích hoạt KHI tình trạng (cũ)

Tùy chọn A:

Bạn có thể thay đổi mã để các điều kiện sẽ nằm trong hàm kích hoạt thay vì chính trình kích hoạt. Với cách tiếp cận này OLD sẽ chỉ được sử dụng trong UPDATE .

Kích hoạt:

CREATE TRIGGER mytrigger
    BEFORE INSERT OR UPDATE ON "mytable"
    FOR EACH ROW 
    EXECUTE PROCEDURE mytrigger();

Chức năng kích hoạt:

CREATE OR REPLACE FUNCTION mytrigger()
  RETURNS trigger AS
$BODY$
begin
if NEW.score > 0 then
     --code for Insert
     if  (TG_OP = 'INSERT') then
           YOUR CODE
     end if;

     --code for update
     if  (TG_OP = 'UPDATE') then
           if OLD.score <> NEW.score then  -- (if score can be null see @voytech comment to this post)
              YOUR CODE
           end if;
     end if;
end if;
return new;
end;
$BODY$
  LANGUAGE plpgsql VOLATILE

Tùy chọn B:

Như Thilo đã đề xuất, hãy viết hai trình kích hoạt có cùng chức năng kích hoạt.

Kích hoạt:

CREATE TRIGGER mytrigger1
    BEFORE INSERT ON "mytable"
    FOR EACH ROW 
    WHEN NEW.score > 0
    EXECUTE PROCEDURE mytrigger();


CREATE TRIGGER mytrigger2
    BEFORE UPDATE ON "mytable"
    FOR EACH ROW 
    WHEN (NEW.score > 0 AND OLD.score <> NEW.score)
    EXECUTE PROCEDURE mytrigger();

Chức năng kích hoạt:

CREATE OR REPLACE FUNCTION mytrigger()
  RETURNS trigger AS
$BODY$
begin
      YOUR CODE
return new;
end;
$BODY$
  LANGUAGE plpgsql VOLATILE


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kiểm tra Go song song được thực thi dựa trên cơ sở dữ liệu PostgreSQL chạy trên Docker

  2. Làm thế nào để lấy giá trị trung bình của các giá trị 'trung bình' trong một nhóm?

  3. Làm cách nào để lưu dữ liệu có ký tự thay đổi dấu phẩy chuyển qua trình kích hoạt?

  4. Cập nhật câu lệnh bằng cách sử dụng mệnh đề WHERE chứa các cột có Giá trị rỗng

  5. Lỗi khi cố chạy pgAdmin4