यहां एक समाधान है जो मैं लॉक-टाइप टेबल के साथ आया था जिसमें केवल एक पंक्ति हो सकती है, जिसमें वाई या एन (उदाहरण के लिए एक एप्लिकेशन लॉक स्टेटस) हो।
एक कॉलम के साथ तालिका बनाएं। मैंने एक कॉलम पर एक चेक बाधा डाली ताकि केवल एक वाई या एन इसे रखा जा सके। (या 1 या 0, या जो कुछ भी) तालिका में
सम्मिलित एक पंक्ति, "सामान्य" राज्य के साथ (जैसे एन बंद नहीं करने का मतलब है)
फिर तालिका केवल एक संकेत है कि पर एक सम्मिलित ट्रिगर बनाना (डीबी 2) या रेज़रर (एसक्यूएल सर्वर) या RAISE_APPLICATION_ERROR (ओरेकल)। इससे ऐसा होता है कि एप्लिकेशन कोड तालिका अपडेट कर सकता है, लेकिन कोई भी INSERT विफल हो जाता है।
डीबी 2 उदाहरण: मेरे लिए
create table PRICE_LIST_LOCK
(
LOCKED_YN char(1) not null
constraint PRICE_LIST_LOCK_YN_CK check (LOCKED_YN in ('Y', 'N'))
);
--- do this insert when creating the table
insert into PRICE_LIST_LOCK
values ('N');
--- once there is one row in the table, create this trigger
CREATE TRIGGER ONLY_ONE_ROW_IN_PRICE_LIST_LOCK
NO CASCADE
BEFORE INSERT ON PRICE_LIST_LOCK
FOR EACH ROW
SIGNAL SQLSTATE '81000' -- arbitrary user-defined value
SET MESSAGE_TEXT='Only one row is allowed in this table';
काम करता है।
स्रोत
2015-03-11 14:35:08
नाम पर प्राथमिक कुंजी के साथ कॉलम '(नाम, मूल्य) 'वाली तालिका का उपयोग क्यों न करें। फिर आप 'तालिका से वैल्यू का चयन कर सकते हैं जहां नाम =?' निश्चित रूप से कि कोई भी पंक्ति या एक पंक्ति वापस नहीं की जाएगी। –
मुझे यकीन नहीं है कि एसक्यूएल यहां सबसे अच्छा समाधान है। हो सकता है कि कॉन्फ़िगरेशन के लिए एक साधारण xml फ़ाइल अधिक उपयुक्त हो। मैं उस कॉन्फ़िगरेशन को सोचने के लिए उपयोग करता हूं! = डेटा और एसक्यूएल डेटा के लिए बनाया गया था। –
@ar - मैंने देखा है कि जब आप एक पूर्णांक को पढ़ने, कहने की उम्मीद कर रहे हैं, तो आप बुरी तरह गलत हो जाते हैं, और आपको मूल्य कॉलम में कुछ बुरी तरह से स्वरूपित मान मिलता है। –