Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

जन्म तिथि पर प्रतिबंध की जाँच करें?

चेक बाधाएं नियतात्मक होनी चाहिए। अर्थात्, एक विशेष पंक्ति को हमेशा बाधा को संतुष्ट करना चाहिए या यह हमेशा बाधा को संतुष्ट करने में विफल होना चाहिए। लेकिन SYSDATE स्वाभाविक रूप से गैर-नियतात्मक है क्योंकि लौटाया गया मूल्य लगातार बदल रहा है। इस प्रकार, आप CHECK . को परिभाषित नहीं कर सकते हैं बाधा जो SYSDATE calls को कॉल करती है या कोई अन्य उपयोगकर्ता-परिभाषित फ़ंक्शन।

यदि आप 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. ओरेकल पीएल/एसक्यूएल - एक साधारण सरणी चर कैसे बनाएं?

  3. Oracle में किसी तिथि से महीने का नाम कैसे प्राप्त करें?

  4. Oracle से SQL सर्वर में एक छवि सम्मिलित करना

  5. ORA-00257:अभिलेखीय त्रुटि। मुक्त होने तक केवल आंतरिक कनेक्ट करें।