मुझे लगता है कि आप निम्न कार्य कर सकते हैं:
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 स्कीमा देखें।