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

KIỂM TRA ràng buộc về ngày sinh?

Ràng buộc kiểm tra phải xác định. Có nghĩa là, một hàng cụ thể phải luôn thỏa mãn ràng buộc hoặc nó phải luôn không thỏa mãn ràng buộc. Nhưng SYSDATE vốn dĩ không xác định vì giá trị trả về liên tục thay đổi. Do đó, bạn không thể xác định một CHECK ràng buộc gọi SYSDATE hoặc bất kỳ chức năng nào khác do người dùng xác định.

Nếu bạn cố gắng tham chiếu SYSDATE trong định nghĩa ràng buộc, bạn sẽ gặp lỗi

SQL> ed
Wrote file afiedt.buf

  1  create table t(
  2      birth_date date check( birth_date between date '1900-01-01' and
  3                                                sysdate )
  4* )
SQL> /
                                              sysdate )
                                              *
ERROR at line 3:
ORA-02436: date or system variable wrongly specified in CHECK constraint

Bạn có thể tạo CHECK ràng buộc trong đó cả ngày tối thiểu và tối đa đều được mã hóa cứng nhưng điều đó sẽ không thực tế lắm vì bạn phải liên tục thả và tạo lại ràng buộc.

SQL> ed
Wrote file afiedt.buf

  1   create table t(
  2       birth_date date check( birth_date between date '1900-01-01' and
  3                                                 date '2011-12-08' )
  4*  )
SQL> /

Table created.

Cách thực tế để thực thi loại yêu cầu này là tạo một trình kích hoạt trên bảng

CREATE OR REPLACE TRIGGER check_birth_date
  BEFORE INSERT OR UPDATE ON employee
  FOR EACH ROW
BEGIN
  IF( :new.emp_dob < date '1900-01-01' or 
      :new.emp_dob > sysdate )
  THEN
    RAISE_APPLICATION_ERROR( 
      -20001, 
      'EMployee date of birth must be later than Jan 1, 1900 and earlier than today' );
  END IF;
END;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Phương pháp dễ nhất để kiểm tra một thủ tục được lưu trữ của Oracle

  2. Làm cách nào để tạo Khóa ngoại với CASCADE BẬT CẬP NHẬT trên Oracle?

  3. Hàm PL / SQL trong Oracle không thể thấy DBMS_AQ

  4. cột không được phép ở đây lỗi trong câu lệnh INSERT

  5. Không còn SPU