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

Lỗi thay đổi sau khi chèn kích hoạt

Trong oracle có hai cấp độ kích hoạt:cấp độ hàng và cấp độ bảng.

Trình kích hoạt mức hàng được thực thi for each row . Trình kích hoạt cấp bảng được thực thi trên mỗi câu lệnh, ngay cả khi một câu lệnh thay đổi nhiều hơn một hàng.
Trong trình kích hoạt cấp hàng, bạn không thể chọn / cập nhật chính bảng có trình kích hoạt:bạn sẽ gặp lỗi thay đổi.

Trong trường hợp này, không cần câu lệnh CẬP NHẬT. Chỉ cần thử cái này:

CREATE OR REPLACE TRIGGER aso_quote_cuhk_trigger
BEFORE INSERT
ON aso.aso_quote_headers_all
FOR EACH ROW
BEGIN
 :new.quote_expiration_date=sysdate+90;     
END;
/

CHỈNH SỬA Rajesh đã đề cập có thể xảy ra rằng trước khi chèn một hàng mới, OP muốn cập nhật tất cả các bản ghi khác trong aso_quote_headers_all bảng.

Chà, điều này là khả thi, nhưng nó hơi phức tạp. Để làm điều này đúng cách, bạn sẽ cần

  1. Gói pl / sql và một biến trong tiêu đề gói được trình kích hoạt sửa đổi. Biến này có thể là một danh sách chứa ID của các bản ghi mới được chèn vào. Cấp hàng sau khi chèn trình kích hoạt sẽ thêm một ID mới vào danh sách. Nội dung của biến gói này sẽ khác nhau đối với mỗi phiên khác nhau, vì vậy hãy gọi biến này là session_variable .
  2. Cấp hàng sau khi chèn trình kích hoạt, sẽ thêm ID mới vào session_variable .
  3. Cấp bảng sau khi chèn trình kích hoạt sẽ nhận ID từ session_variable , xử lý ID và sau đó xóa nó khỏi session_variable . Trình kích hoạt này có thể thực hiện các lựa chọn / cập nhật cần thiết trên aso_quote_headers_all. Sau khi một ID mới chèn được xử lý, trình kích hoạt này phải đảm bảo rằng nó được xóa khỏi session_variable .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. làm thế nào để chuyển đổi ngày thành số tháng?

  2. Làm thế nào để kiểm tra không gian bảng trong Oracle SQL Developer?

  3. PreparedStatement và setTimestamp trong oracle jdbc

  4. Nhà tiên tri. Thiếu từ khóa khi sử dụng câu lệnh viết hoa. Lỗi 00905

  5. Truy vấn Oracle đơn giản:chữ không khớp với chuỗi định dạng