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

Ngăn chặn trình kích hoạt chèn

Tôi đã trò chuyện với một giảng viên đại học dạy PL / SQL sau khi tôi thuyết trình tại một hội nghị. Bài nói chuyện của tôi là về PL / SQL thực hành tốt; một trong những trang trình bày của tôi chỉ nói "Không sử dụng trình kích hoạt". Người giảng viên nói với tôi rằng anh ấy thấy những lời khuyên như vậy khó dung hòa với nhu cầu của chương trình học. Họ phải dạy cho sinh viên của mình tất cả các cú pháp nhưng ông thừa nhận rằng họ thường đặt ra các nhiệm vụ đòi hỏi các giải pháp mà chúng tôi sẽ không sử dụng khi viết phần mềm một cách chuyên nghiệp.

Đây là một câu hỏi như vậy. Cách tiếp cận đúng là sử dụng ràng buộc kiểm tra, vì câu trả lời của Gordon hiển thị . Ràng buộc hiệu quả hơn và cũng có tính thành ngữ. Nhưng giáo viên của bạn muốn bạn viết một trình kích hoạt, vì vậy đây là mã của bạn, đã được sửa lại.

CREATE OR REPLACE TRIGGER CheckAdvance
    BEFORE INSERT OR UPDATE OF advance ON titles
    FOR EACH ROW
BEGIN
    IF (:new.advance < 0  
         OR :new.advance > 100)
    THEN
        raise_application_error(-20000
                , 'Advance cannot be less than zero or greater than one hundred.');
    END IF;
END;

Những điểm cần lưu ý:

  1. TẠO HOẶC THAY THẾ có nghĩa là chúng tôi có thể thay đổi mã kích hoạt mà không cần tuyên bố DROP sơ bộ.
  2. BEGIN và END các khối mã khung, chẳng hạn như nội dung trình kích hoạt.
  3. Các điều kiện tĩnh được đóng khung với các từ khoá IF ... END IF; WHEN là để thoát các cấu trúc vòng lặp.
  4. Các giá trị cột trong bảng tham chiếu có từ khóa:MỚI (và:CŨ) - lưu ý dấu hai chấm.
  5. Sử dụng RAISE_APPLICATION_ERROR để đưa ra một ngoại lệ; số lỗi phải nằm trong phạm vi -20999 đến -20000 mà Oracle dự trữ cho các trường hợp ngoại lệ do người dùng xác định.
  6. Làm cho thông báo lỗi của bạn có ý nghĩa:cho người dùng biết họ đã làm gì sai thay vì bắt họ đoán.
  7. Tìm hiểu cách sử dụng thụt lề để làm cho mã của bạn có thể đọc được. Đồng nghiệp tương lai của bạn sẽ cảm ơn bạn vì điều đó.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle SQL - lấy số ngày giữa hai ngày trong một tháng cụ thể

  2. Cách xóa giá trị cụ thể khỏi chuỗi được phân tách bằng dấu phẩy trong oracle

  3. Lưu trữ Mảng có thể tìm kiếm trong trường cơ sở dữ liệu SQL

  4. xóa từ cụ thể khỏi chuỗi

  5. Oracle (Cũ?) Gia nhập - Một công cụ / tập lệnh để chuyển đổi?