2012-01-23 18 views
7

संपादित करने के लिए स्टेटमेंट ट्रिगर्स वीएस संपादित करें: मुझे नहीं पता कि यह किस प्रकार है, यह एक परीक्षा पत्र में है।एसक्यूएल: प्रत्येक पंक्ति

मुझे यह नहीं मिला, दुख की बात है। मैं पंक्ति स्तर ट्रिगर्स से काफी खुश हूं लेकिन क्या कोई मुझे बता सकता है कि ट्रिगर बयान स्तर के बजाय परिणाम कैसे भिन्न होगा?

रिलेशन/वक्तव्य उत्प्रेरक/पंक्ति स्तर ट्रिगर

Employee(ID VARCHAR2(30), Salary NUMBER) 


Create Trigger AutoRaise 
After insert on Employee 
Referencing new table as NT 
update Employee 
Set salary = salary + (select avg(salary) from NT) 


Create trigger AutoRaise 
After insert on Employee 
Referencing new table as NT 
For each Row 
Update employee 
Set salary = salary + (select avg(salary) from NT) 

मैं समझता हूँ कि में प्रत्येक पंक्ति के ट्रिगर यह प्रत्येक पंक्ति को ट्रिगर बयान से प्रभावित के लिए आग के लिए। अब कथन स्तर ट्रिगर परिणामों को अलग-अलग संशोधित करेगा? कहें कि क्या मैंने एक बयान में पांच टुपल डाले हैं, क्या यह उन सभी के लिए वेतन आदि निर्धारित करेगा? यदि हां, तो पंक्ति स्तर ट्रिगर का क्या लाभ है?

मैंने खोज करने की कोशिश की है लेकिन मैं बस इसके चारों ओर अपना सिर नहीं प्राप्त कर सकता।

धन्यवाद,

संपादित करें: अब, मैं सिर्फ घने किया जा रहा रहा हूँ, लेकिन या तो ट्रिगर अलग outputs का उत्पादन होगा? के बाद ट्रिगर बनाई गई है

(A,50) 

एक बयान में जोड़ा गया: ट्रिगर की रचना से पहले

तालिका में: बयान स्तर ट्रिगर अगर मैं उदाहरण मान इस्तेमाल किया के लिए

(B,70), (C,30) 

पहले ट्रिगर स्थापित करेगा प्रत्येक टुपल के लिए वेतन डाला जा रहा है, निश्चित रूप से? तो पहला 120 बन जाएगा (औसत 50 है, 70 + 50 = 120) और दूसरा 80 हो जाएगा। यदि यह सच है, तो दूसरा ट्रिगर परिणाम में भिन्न कैसे होता है?

+2

** WHAT ** डेटाबेस सिस्टम और आप किस संस्करण के बारे में बात कर रहे हैं ?? ** एसक्यूएल ** सिर्फ संरचित क्वेरी भाषा है - कई डेटाबेस सिस्टम द्वारा उपयोग की जाने वाली भाषा - एसक्यूएल ** ** ** डेटाबेस उत्पाद नहीं है ... इस तरह की चीजें अक्सर विक्रेता-विशिष्ट होती हैं - इसलिए हमें वास्तव में यह जानने की ज़रूरत है कि क्या डेटाबेस सिस्टम जिसके बारे में आप बात कर रहे हैं .... –

+0

VARCHAR2 इंगित करता है कि यह ओरेकल है। लेकिन फिर भी वाक्यविन्यास वैध नहीं है क्योंकि ऐसी कोई चीज़ नहीं है जैसे 'नई तालिका को संदर्भित करना ...' और प्रारंभ/अंत भी गायब है। –

+0

दुर्भाग्य से यह एक पिछले परीक्षा पत्र से है इसलिए कोई विशिष्ट distro का उल्लेख नहीं किया गया है। –

उत्तर

4

अंतर यह है कि बयान के स्तर का ट्रिगर SELECT avg(salary) FROM NT के मामले में डाला पंक्तियों के लिए वेतन की औसत वापस आ जाएगी है, लेकिन पंक्ति स्तर के मामले में, avg(salary) हमेशा नए रिकॉर्ड (ट्रिगर व्यक्तिगत रूप से प्रत्येक पंक्ति के लिए मार डाला) की salary के बराबर है। इसके अलावा, यदि कोई रिकॉर्ड प्रभावित नहीं हुआ है तो कथन स्तर ट्रिगर निष्पादित किया जाएगा। पंक्ति स्तर ट्रिगर के मामले में अधिकांश आरडीएमएस इसे प्रभावित नहीं करते हैं जब 0 रिकॉर्ड प्रभावित होते हैं।

साइड नोट। मेरा मानना ​​है कि प्रश्न में ट्रिगर निकायों को केवल उदाहरण के लिए दिया जाता है; अन्यथा, मैं अनुशंसा करता हूं कि ट्रिगर्स में रिकर्सन का उपयोग न करें, भले ही विशेष आरडीएमएस में ऐसा विकल्प हो।

+0

हाय, उत्तर के लिए धन्यवाद। अब, मैं सिर्फ घना हो रहा हूं लेकिन या तो अलग-अलग आउटपुट उत्पन्न कर सकता हूं?ट्रिगर की रचना से पहले तालिका में: बयान स्तर ट्रिगर अगर मैं उदाहरण मान इस्तेमाल किया के लिए '(ए, 50)' एक बयान में जोड़ा गया के बाद ट्रिगर बनाई गई है: '(बी, 70), (सी, 30) ' पहला ट्रिगर प्रत्येक टुपल डालने के लिए वेतन निर्धारित करेगा, निश्चित रूप से? तो पहला 120 बन जाएगा (औसत 50 है, 70 + 50 = 120) और दूसरा 80 हो जाएगा। यदि यह सच है, तो दूसरा ट्रिगर परिणाम में भिन्न कैसे होता है? –

+1

दूसरे ट्रिगर (पंक्ति स्तर) के लिए यह अलग होगा: पहली पंक्ति (बी, 70) डाली गई: 70 + औसत (70) = 140. दूसरी पंक्ति डाली गई (30): पहली पंक्ति (140 +30) = 170, दूसरा 30 + 30 = 60. पंक्ति ट्रिगर को दो बार निष्पादित किया जाएगा, प्रत्येक पंक्ति के लिए 'NEW_TABLE' में 1 रिकॉर्ड होगा। – a1ex07

+0

इसके अलावा, यह बहुत संभावना है कि पंक्ति स्तर ट्रिगर के मामले में आपको एक त्रुटि मिलेगी (या आपको कुछ तर्क जोड़ने की आवश्यकता है जो आरडीएमएस ट्रिगर में रिकर्सन की अनुमति देता है तो रिकर्सन स्तर को संभालने की आवश्यकता है) क्योंकि यह उसी तालिका को संशोधित करने का प्रयास करता है। – a1ex07

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