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

lợi thế của việc sử dụng một trình kích hoạt để điền khóa thay thế trong oracle plsql

Mẫu cụ thể này thực sự khá nguy hiểm vì nó cho phép ai đó nhập thủ công một ID mới có thể xung đột với khóa thay thế đã tồn tại hoặc khóa mà chuỗi của bạn có thể tạo ra trong tương lai.

Trình kích hoạt của bạn thực sự phải trông như thế này để đảm bảo rằng đối với mỗi bản ghi mới sẽ nhận được một khóa duy nhất. Nếu bạn đang sử dụng phiên bản 11.2 trở lên thì không cần select ... into ...

CREATE OR REPLACE TRIGGER TEST_TRIG
BEFORE INSERT ON my_table
FOR EACH ROW
BEGIN
   :new.column1 := my_table_seq.NEXTVAL;
END;

Lợi ích của phương pháp này là nó luôn luôn xong. Bất kỳ giá trị nào mà bất kỳ ai đặt vào cột này đều bị ghi đè lên một thứ sẽ hoạt động và sử dụng đúng trình tự; nếu ai đó quên thêm nó vào câu lệnh sẽ vẫn hoạt động.

Nó giúp bạn không thể bẻ khóa thay thế của mình.

Với những gì bạn đề xuất, hãy tưởng tượng rằng ai đó đặt số 1 thay thế; bạn nhận được một vi phạm khóa chính. Nếu ai đó quên thì còn nhiều lỗi hơn. Bạn sẽ không bao giờ đảm bảo rằng mọi cập nhật cho bảng của bạn sẽ thông qua một điểm nhập duy nhất để trình kích hoạt đảm bảo rằng PK được điền chính xác.

Cần lưu ý rằng từ 12c, bạn có thể sử dụng danh tính cột , làm rõ ràng mối liên kết giữa bảng và tự động tăng; không cần kích hoạt hoặc trình tự. Cú pháp cho việc tạo bảng DDL sẽ là:

create table <table_name> ( <column_name> generated as identity );


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. quyền truy cập bị từ chối khi sử dụng JDBC từ một applet của trình duyệt

  2. 2 Hàm lấy Ngày, Tháng và Năm từ một Ngày trong Oracle

  3. Tương thích oci8, php7 và Oracle 10.1

  4. Lỗi chung:1008 OCIStmtExecute:ORA-01008:không phải tất cả các biến bị ràng buộc

  5. Hàm ABS () trong Oracle