Oracle
 sql >> база данни >  >> RDS >> Oracle

ПРОВЕРИТЕ ограничение за датата на раждане?

Ограниченията за проверка трябва да са детерминирани. Тоест, конкретен ред винаги трябва да удовлетворява ограничението или винаги трябва да не удовлетворява ограничението. Но SYSDATE е по своята същност недетерминиран, тъй като върнатата стойност постоянно се променя. По този начин не можете да дефинирате CHECK ограничение, което извиква SYSDATE или всяка друга дефинирана от потребителя функция.

Ако се опитате да препратите SYSDATE в дефиницията на ограничението ще получите грешка

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

Можете да създадете CHECK ограничение, при което и минималната, и максималната дата са твърдо кодирани, но това не би било особено практично, тъй като ще трябва постоянно да отхвърляте и пресъздавате ограничението.

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.

Практическият начин за налагане на този вид изискване би било да се създаде тригер на масата

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. Как да попълним календарна таблица в Oracle?

  2. Как да планирате работа в Oracle SQL Developer?

  3. Премахване на дублиращи се редове в таблица

  4. Как да дефинирам тригер ON COMMIT в Oracle?

  5. Външни таблици на Oracle