Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

PERIKSA batasan tanggal lahir?

Periksa kendala harus deterministik. Artinya, baris tertentu harus selalu memenuhi kendala atau harus selalu gagal memenuhi kendala. Tapi SYSDATE secara inheren non-deterministik karena nilai yang dikembalikan terus berubah. Dengan demikian, Anda tidak dapat mendefinisikan CHECK batasan yang memanggil SYSDATE atau fungsi lain yang ditentukan pengguna.

Jika Anda mencoba mereferensikan SYSDATE dalam definisi kendala, Anda akan mendapatkan kesalahan

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

Anda dapat membuat CHECK batasan di mana tanggal minimum dan maksimum dikodekan secara keras tetapi itu tidak akan terlalu praktis karena Anda harus terus-menerus menjatuhkan dan membuat ulang batasan.

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.

Cara praktis untuk menerapkan persyaratan semacam ini adalah dengan membuat pemicu di atas meja

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. Stempel Waktu Hibernasi dengan Zona Waktu

  2. Memiliki Output PL/SQL secara Real Time

  3. java.security.AccessControlException:akses ditolak (java.security.SecurityPermission authProvider.SunMSCAPI)

  4. Menemukan penyebab kesalahan kebuntuan dari file jejak Oracle

  5. Kesalahan ORA 00904:Pengenal Tidak Valid