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

Oracle:kích hoạt tăng tự động.

Được rồi, tôi nghĩ tôi hiểu những gì đang xảy ra. Câu trả lời cho câu hỏi của bạn là một hoàn toàn lớn . Có thể có tác động lớn nếu bạn tắt trình kích hoạt này.

Lý do trình kích hoạt này dường như tồn tại là để giải quyết tình huống trong đó giá trị khóa chính không được cung cấp trên phụ trang vào bảng của bạn. Nếu điều này xảy ra ở bất kỳ đâu trong mã của bạn, việc loại bỏ trình kích hoạt sẽ phá vỡ các phần chèn đó.

Bạn phải làm hai điều.

  1. Chỉnh lại cò súng, rõ ràng là nó bị hỏng; sửa nó:

    CREATE OR REPLACE TRIGGER  BI_PRIVILEGE
      before insert on PRIVILEGE              
      for each row  
    begin   
      if :NEW.PRIVILEGE_ID is null then 
        select PRIVILEGE_SEQ.nextval into :NEW.PRIVILEGE_ID from dual; 
      end if; 
    end; 
    

    Nếu bạn đang sử dụng Oracle 11G trở lên thì bạn có thể sử dụng cái này để thay thế:

      if :NEW.PRIVILEGE_ID is null then 
        :NEW.PRIVILEGE_ID := PRIVILEGE_SEQ.nextval; 
      end if; 
    
  2. Tìm hiểu xem điều này có thực sự xảy ra hay không. Nếu bạn chèn bản ghi mà không có khóa chính, bạn cần tìm hiểu lý do tại sao điều này xảy ra và liệu hành vi có đúng hay không. Nếu đó là do bạn đang mắc kẹt với trình kích hoạt, nếu không hãy khắc phục điều đó. Nếu bạn không bao giờ chèn các bản ghi mà không có khóa chính thì bạn có thể vô hiệu hóa trình kích hoạt.

    Cách nhanh nhất để tìm ra có thể là tắt trình kích hoạt, nhưng nó sẽ phá vỡ nội dung của bạn. Nếu đây là cơ sở dữ liệu sản xuất thì chỉ bạn mới có thể biết liệu nó có xứng đáng hay không. Cá nhân tôi thì không.



  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 cách nào để chuyển các tham số getters và setters của tôi cho lớp kết nối?

  2. Kết nối với Cơ sở dữ liệu Oracle thông qua C #?

  3. PHP oci_connect () TNS:không thể phân giải mã định danh kết nối (ORA-12154)

  4. ResultSet.getString (Ngày) khác nhau dựa trên trình điều khiển

  5. Cách giải quyết ORA-29285:lỗi ghi tệp