मैं एक ट्रिगर कैसे बनाउंगा जो यह सुनिश्चित करने के लिए एक मूल्य की जांच करेगा कि यह सही मूल्य है या नहीं तो यह एक त्रुटि फेंक देगा? - एसक्यूएल, ओरेकल

 DROP TABLE Officer cascade constraints;
CREATE TABLE Officer(
StaffID        Number(6)  PRIMARY KEY,
FirstName    VARCHAR2(16),
MiddleName    VARCHAR2(16),
Surname    VARCHAR2(16),
Rank    VARCHAR2(16),
Department    VARCHAR2(16),
Place_Of_Work   VARCHAR2(16),
Hire_Date   VARCHAR2(16),
Inspector_ID    Number(6));

alter table Officer
add constraint Officer_Inspector_ID_FK
foreign key ( Inspector_ID )
references Officer ( StaffID )
on delete set null
;

create sequence Officer_seq start with 100 increment by 1 nomaxvalue;
create trigger Officer_trigger
before insert on Officer
for each row
begin
select Officer_seq.nextval into :new.StaffID from dual;
end;​

मैं जो करना चाहता हूं उसे ऐसा करना है ताकि अगर कोई होइंस्पेक्टर आईडी एक ऐसे अधिकारी के लिए दर्ज की जाती है जो इंस्पेक्टर की रैंक वाले किसी अधिकारी से मेल नहीं खाती है, तो यह एक त्रुटि फेंक देगी जो कहती है कि वे इंस्पेक्टर नहीं हैं और उन्हें एक मान्य आईडी दर्ज करने के लिए प्रेरित करेंगे।

उत्तर:

उत्तर № 1 के लिए 1

कोई ट्रिगर की आवश्यकता नहीं है

आप जो वर्णन कर रहे हैं वह अधिकारी (इंस्पेक्टर_आईडी, इंस्पेक्टर_रैंक) से अधिकारी (कर्मचारी_आईडी, रैंक) में बहु-विदेशी कुंजी बाधा है।

आपको इंस्पेक्टर_रैंक फ़ील्ड को अधिकारी तालिका में जोड़ना होगा

तो आपको अधिकारी और आईडी दोनों रैंक को लिंक करने की आवश्यकता है साथ में इसलिए वे दोनों एक ही रिकॉर्ड हैं

foreign key (Inspector_id, Inspector_rank) references Officer(Staff_id, rank)

तो आपको इंस्पेक्टर रैंक चेकर इंस्पेक्टर रैंक = इंस्पेक्टर की एक साधारण मूल्य बाधा की आवश्यकता है


संबंधित सवाल
सबसे लोकप्रिय