2012-02-28 5 views
5

मैं एक टेबल पर एक अद्यतन के लिए ट्रिगर के बजाय एक बनाने की कोशिश करता हूं। इसके बजाए ट्रिगर के सामान्य उपयोग विचार हैं लेकिन स्क्लाइट मैनुअल का कहना है कि इसके बजाए ट्रिगर के लिए टेबल के लिए भी मान्य हैं। लेकिन मुझे त्रुटि मिलती है: तालिका पर ट्रिगर के इंस्टाल को नहीं बना सकता है। और मैं सोच रहा हूं क्यों।क्यों SQLite त्रुटि: तालिका पर ट्रिगर की स्थापना नहीं कर सकता?

मैं विदेशी कुंजी का उपयोग:

PRAGMA foreign_keys = ON; 

और मैं दो तालिकाओं की है। एक पहचानकर्ता तालिका:

CREATE TABLE id 
(
    id  INTEGER PRIMARY KEY AUTOINCREMENT, 
    created REAL NOT NULL DEFAULT CURRENT_TIMESTAMP 
); 

और एक मेज पहचानकर्ता का संदर्भ जो:

CREATE TABLE person 
(
    id  INTEGER NOT NULL DEFAULT (last_insert_rowid()) REFERENCES id, 
    login  TEXT, 
    password TEXT, 
    firstname TEXT, 
    lastname TEXT, 
    email  TEXT, 
    created REAL NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    PRIMARY KEY (id, created) 
); 

सम्मिलित ठीक काम करता है:

INSERT INTO id DEFAULT VALUES; 
INSERT INTO person (login) VALUES ('root'); 
SELECT * FROM person; 
1|root|||||2012-02-28 18:03:45 

अब मैं निम्नलिखित ट्रिगर है, जो एक अद्यतन धर्मान्तरित परिभाषित करना चाहते हैं एक डालने में:

CREATE TRIGGER person_update INSTEAD OF UPDATE OF login, password, firstname, lastname, email ON person 
BEGIN 
    INSERT INTO person (login, password, firstname, lastname, email) 
    VALUES (new.login, new.password, new.firstname, new.lastname, new.email); 
END; 

लेकिन यह उपरोक्त त्रुटि के साथ विफल रहता है और मुझे समझ में नहीं आता क्यों।

उत्तर

1

मैं आशा करती हूं कि इस पोस्ट में सिर्फ एक गलती है तो लेकिन अपने create बयान पढ़ना चाहिए:

INSTEAD OF UPDATE ON 

आपके द्वारा लिखा गया:

INSTEAD OF UPDATE OF 
+0

कोई यह गलत नहीं है। सिंटैक्स तालिका-नाम पर कॉलम-नाम के अद्यतन की स्थापना है। यहां देखें: http://sqlite.org/lang_createtrigger.html – ceving

7

मैं the source code से गुजर रही की कोशिश की ("इन्स्टाइड ऑफ़ नहीं बनाया जा सकता" के लिए खोज करें) और टिप्पणी में अपना लिंक पढ़ने के बावजूद जहां ट्रिगर स्टेटमेंट को विस्तृत विवरण में उल्लिखित किया गया है, मैं कहूंगा कि INSTEAD OF के साथ ट्रिगर्स केवल विचारों के लिए हैं और इन्हें टेबल के साथ उपयोग नहीं किया जा सकता है।

+1

हां, यह सही जवाब है। ट्रिगर्स के इंस्टॉलेशन सिर्फ विचारों के लिए हैं। – m0skit0

+1

क्रिएट ट्रिगर स्टेटमेंट में इंस्टीटैड निर्दिष्ट करके विचारों के साथ-साथ साधारण तालिकाओं पर ट्रिगर्स बनाया जा सकता है। –

+4

गंभीरता से? यह कुछ बकवास है। +1 –

0

बस एक दृश्य person_view as select * from person बनाएं और अपने ट्रिगर को इंगित करें।

संबंधित मुद्दे