मुझे एक SQL क्वेरी के साथ समस्या हो रही है। यदि एक ही पंक्ति पहले से मौजूद नहीं है तो मुझे एक पंक्ति डालने की आवश्यकता है।वर्ग - यदि मौजूद नहीं है तो
DECLARE
BEGIN
FOR FOLDER_ROW IN (SELECT FOLDERID, USERID FROM DATA1.FOLDERS)
LOOP
IF NOT EXISTS (SELECT * FROM DATA1.FOLDER_USER WHERE FOLDER_ID = FOLDER_ROW.FOLDERID AND USER_ID = FOLDER_ROW.USERID)
INSERT INTO DATA1.FOLDER_USER (FOLDER_ID, USER_ID) VALUES (FOLDER_ROW.FOLDERID, FOLDER_ROW.USERID);
END LOOP;
COMMIT;
END;
मैं एसक्यूएल साथ बहुत परिचित नहीं होगा विशेष रूप से मौजूद नहीं वाक्य रचना इसलिए जब मैं निष्पादित मैं निम्नलिखित त्रुटि मिलती है: "फिर"
ORA-06550: line 37, column 11: PLS-00103: Encountered the symbol "INSERT" when expecting one of the following:
then and or
प्रतीक यह वही है मैं अब तक किया है जारी रखने के लिए "INSERT" के लिए प्रतिस्थापित किया गया था।
ORA-06550: line 38, column 10: PLS-00103: Encountered the symbol "LOOP" when expecting one of the following: if ORA-06550: line 40, column 5: PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following: end not pragma final instantiable order overriding static member constructor map
++ 1 'अगर मौजूद है() ... INSERT' आमतौर पर परमाणु नहीं, एक परस्पर विरोधी रिकॉर्ड अर्थ अस्तित्व की जांच और डालने के बीच डाला जा सकता है। –
@ एमएम - ओरेकल में एक एसक्यूएल कथन हमेशा परमाणु है। यदि कोई अनन्य अनुक्रमणिका नहीं है, तो आप विवादों के साथ समाप्त हो सकते हैं क्योंकि डाला गया एक और सत्र पंक्ति को नहीं देखता क्योंकि पहले सत्र ने इसे अभी तक नहीं किया था। –
मैं ओरेकल के व्यवहार से यहां बात नहीं कर सकता, लेकिन इसके लिए आपका शब्द लेगा। मुझे कुछ डीबीएमएस का इलाज पता है 'अगर पूर्व (...) फिर' और 'इन्हें दो में दो बयानों के रूप में, एक नहीं, लेकिन यह लेनदेन अलगाव स्तर और साथ ही साथ निर्भर करता है। –