के बीच सबक्वायरी के आधार पर ओरेकल एसक्यूएल अपडेट मैं वर्तमान में एक क्वेरी-सक्षम तालिका को अद्यतित रखने के लिए अद्यतन विवरण लिख रहा हूं। स्कीमा दोनों तालिकाओं के बीच समान है और सामग्री महत्वपूर्ण नहीं हैं: नोट केदो टेबल
update PRODUCTION
set name = (select stage.name from staging stage where stage.name=name and rownum <2),
count = (select stage.countfrom staging stage where stage.count=count and rownum <2);
दो बातें कर रहा है 1) कोई यह है कि जहां खंड पर:
STAGING
ID
NAME
COUNT
PRODUCTION
ID
NAME
COUNT
मेरे अद्यतन बयान इस प्रकार है लग रहा है मेरे अपडेट का अंत (यह समस्या हो सकती है) और 2) अद्यतन होने के बाद सभी रिकॉर्ड समान मान हैं। क्या मैं यह मतलब है निम्नलिखित:
BEFORE UPDATE:
1,"JOHN", 12;
2,"STEVE",15;
3,"BETTY",2;
AFTER UPDATE
1,"JOHN", 12;
2,"JOHN",12;
3,"JOHN",12;
मेरा प्रश्न है कि कैसे मैं इतना है कि तालिका ठीक से एक सही एसक्यूएल अद्यतन के रूप में मंचन से 'नई' डेटा को दर्शाता है यह ठीक करते हैं?
अद्यतन
तो मेरी मचान डेटा संयोग दर्पण सकता है क्या PRODUCTION
में और चर्चा की खातिर यह होगा के लिए है:
STAGING DATA TO MERGE:
1,"JOHN", 12;
2,"STEVE",15;
3,"BETTY",2;
अद्यतन दूसरा
क्वेरी कि मैं यह दौड़ना चाहता हूं:
update PRODUCTION
set production.name = staging.name,
production.count = staging.count
where production.name = staging.name;
हालांकि यह "staging.name"
क्या आप ** नाम ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ##* – hmmftg
आप इस अद्यतन के बजाय नए मान डालने के लिए ट्रिगर्स का उपयोग क्यों नहीं करते? यह अद्यतन वास्तव में क्या करता है? – hmmftg
सहमत हैं, टेबल को सिंक करते समय, ट्रिगर वास्तविक समय को वास्तविक समय में रखने में वास्तव में उपयोगी हो सकते हैं। तालिका त्रुटियों को म्यूट करने के लिए बस देखें, और इसे बाद में या अद्यतन के रूप में करना सुनिश्चित करें। – Hermit