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

Sự cố khi thay đổi ngày bằng trình kích hoạt trong oracle

Bạn muốn một cái gì đó như thế này:

CREATE OR REPLACE TRIGGER TRIGGER_D
BEFORE
INSERT OR UPDATE ON CONTRACTS
FOR EACH ROW
DECLARE
BEGIN
  UPDATE CONTRACTS
  SET    ENDDATE   = :NEW.STARTDATE - INTERVAL '1' DAY
  WHERE  CLIENTID  = :NEW.CLIENTID
  AND    ENDDATE   > :NEW.STARTDATE
  AND    STARTDATE < :NEW.STARTDATE;
END;

Tuy nhiên, nó đang cập nhật bảng mà trình kích hoạt đang theo dõi và có vẻ như trình kích hoạt sẽ gây ra các bản cập nhật sẽ gọi lại trình kích hoạt và nhận được lỗi bảng thay đổi.

Tốt hơn là bạn nên gói logic nghiệp vụ của mình trong một quy trình được lưu trữ nơi nó có thể thực hiện cập nhật trên các hàng trước đó và sau đó thực hiện chèn / cập nhật. Sau đó, thay vì thực hiện các câu lệnh DML trực tiếp trên bảng, hãy gọi thủ tục được lưu trữ.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Biểu thức chính quy (RegEx) cho IPv6 Tách biệt với IPv4

  2. Lỗi SSMA cho Oracle Kết nối với Oracle

  3. Làm cho hàm last_day của Oracle tương thích với cơ sở dữ liệu H2

  4. So sánh các hàng và cột của cùng một bảng

  5. Cách đặt giá trị mặc định cho cột của bảng mới tạo từ câu lệnh select trong 11g