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

चेक बाधा में केस स्टेटमेंट का उपयोग करना

मुझे लगता है कि आप निम्न कार्य कर सकते हैं:

CREATE TABLE Grade
(
  salary_grade    char(1) NOT NULL CHECK (REGEXP_LIKE(salary_grade, '[A-G]', 'c')),
  salary_scale    char(2) DEFAULT 'S1' NOT NULL,
  CONSTRAINT pk_grade PRIMARY KEY (salary_grade),
  CONSTRAINT ck_grade_scale CHECK ( REGEXP_LIKE(salary_grade, '[A-D]', 'c') AND salary_scale = 'S1'
                                 OR REGEXP_LIKE(salary_grade, '[E-G]', 'c') AND salary_scale = 'S2' )
);

कृपया यहां SQL Fiddle स्कीमा देखें।

आपको UPPER() की आवश्यकता नहीं है salary_grade पर प्रतिबंध चूंकि रेगेक्स चेक पर्याप्त होगा (आप पहले से ही यह सुनिश्चित करने के लिए जांच कर रहे हैं कि यह ए और जी के बीच एक अपरकेस अक्षर है)। मुझे नहीं लगता कि salary_scale . पर कोई बाधा है या तो अकेले ही आवश्यक है क्योंकि यह तार्किक रूप से, अंतिम बाधा में समाहित होगा।

अपडेट करें

यहां बताया गया है कि आप इसे CASE . के साथ कैसे कर सकते हैं कथन:

CREATE TABLE Grade
(
  salary_grade    char(1) NOT NULL CHECK (REGEXP_LIKE(salary_grade, '[A-G]', 'c')),
  salary_scale    char(2) DEFAULT 'S1' NOT NULL,  
  CONSTRAINT pk_grade PRIMARY KEY (salary_grade),
  CONSTRAINT ck_grade_scale CHECK ( salary_scale = CASE WHEN REGEXP_LIKE(salary_grade, '[A-D]', 'c') THEN 'S1' ELSE 'S2' END )
);

कृपया यहां SQL Fiddle स्कीमा देखें।



  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 XMLType फ़ंक्शन के साथ MyBatis का उपयोग करना मौजूद है नोड ()

  4. क्या ऑरैकल में संग्रहित प्रक्रियाओं को निष्पादित करने के बाद कोई ऑटो कमिट होता है?

  5. IN खंड में SQL एकाधिक स्तंभ