2013-05-08 10 views
8

मेरी एक स्क्रिप्ट है जिसे मैं SQL सर्वर में उपयोग करता हूं लेकिन मुझे इसे ओरेकल प्रारूप में परिवर्तित करने की आवश्यकता है। क्या कोई मदद कर सकता है?किसी अन्य तालिका से एकाधिक कॉलम अपडेट करना - ओरेकल प्रारूप

UPDATE PERSONS P SET 
     P.JOBTITLE=TE.JOBTITLE, 
     P.LAST_NAME=TE.LAST_NAME, 
     P.FIRST_NAME=TE.FIRST_NAME, 
     P.DBLOGIN_ID=TE.DBLOGIN_ID, 
     P.EMAIL_ID=TE.EMAIL_ID, 
     P.USERLEVEL=TE.USERLEVEL, 
     P.FACILITY_ID=TE.FACILITY_ID, 
     P.SUPERVISOR=TE.SUPERVISOR, 
     P.DEPARTMENT=TE.DEPARTMENT, 
     P.WINLOGINID=TE.WINLOGINID 
    FROM TEMP_ECOLAB_PERSONS TE 
    WHERE P.PERSON=TE.PERSON; 

- नीचे दिए गए लेख से मैं निम्नलिखित कथन के साथ आया हूं। यह अभी भी दुर्भाग्य से काम नहीं करता है:

UPDATE (SELECT P.JOBTITLE, P.LAST_NAME, P.FIRST_NAME, P.DBLOGIN_ID, P.EMAIL_ID, 
     P.USERLEVEL, P.FACILITY_ID, P.SUPERVISOR, P.DEPARTMENT, 
     TE.JOBTITLE, TE.LAST_NAME, TE.FIRST_NAME, TE.DBLOGIN_ID, TE.EMAIL_ID, 
     TE.USERLEVEL, TE.FACILITY_ID, TE.SUPERVISOR, TE.DEPARTMENT 
    FROM PERSONS P, TEMP_ECOLAB_PERSONS TE WHERE P.PERSON=TE.PERSON) 
    SET 
    P.JOBTITLE=TE.JOBTITLE, 
    P.LAST_NAME=TE.LAST_NAME, 
    P.FIRST_NAME=TE.FIRST_NAME, 
    P.DBLOGIN_ID=TE.DBLOGIN_ID, 
    P.EMAIL_ID=TE.EMAIL_ID, 
    P.USERLEVEL=TE.USERLEVEL, 
    P.FACILITY_ID=TE.FACILITY_ID, 
    P.SUPERVISOR=TE.SUPERVISOR, 
    P.DEPARTMENT=TE.DEPARTMENT; 

उत्तर

8

इस तरह मैं इसे करूँगा। यह सबसे अच्छा प्रदर्शन नहीं हो सकता है, लेकिन यह काम करता है।

MERGE INTO PERSONS_TMP PT 
USING ( 
    SELECT P.PERSON, P.JOB_TITLE, P.FIRST_NAME, P.LAST_NAME, P.FACILITY_ID 
    FROM PERSONS P) TMP 
ON (PT.PERSON = TMP.PERSON) 
WHEN MATCHED THEN 
UPDATE SET 
    PT.FACILITY_ID = TMP.FACILITY_ID, 
    PT.JOB_TITLE = TMP.JOB_TITLE, 
    PT.FIRST_NAME = TMP.FIRST_NAME, 
    PT.LAST_NAME = TMP.LAST_NAME; 

उपरोक्त स्क्रिप्ट PERSONS तालिका से डेटा का उपयोग कर PERSONS_TMP तालिका में जानकारी अपडेट करेगी। मैं आपके मामले में विश्वास करता हूं, आप इसे दूसरी तरफ चाहते हैं। तो, कृपया सुनिश्चित करें कि आप स्क्रिप्ट चलाने से पहले आवश्यक परिवर्तन करते हैं।

आप उपरोक्त एसक्यूएल को तब तक जोड़ सकते हैं जब आप नए रिकॉर्ड डालने की आवश्यकता हो, यदि यह मौजूद नहीं है।

+0

इस प्रकार मैं जोड़ा क्या (मुझे लगता है कि) लेख के ऊपर करने के लिए कहा। फिर भी मेरे लिए दुर्भाग्य से काम नहीं करता। – PhelpsK

+0

टॉम की वेबसाइट के लिंक के साथ भ्रम के लिए खेद है। मैंने टॉम की वेबसाइट से लिपि की कोशिश की और यह भी काम नहीं किया। इसलिए, मैंने अपनी वेबसाइट पर लिंक हटा दिया। – donny

+0

यह आपको धन्यवाद धन्यवाद! – PhelpsK

12
UPDATE PERSONS P 
    SET (jobtitle, 
     last_name, 
     first_name, 
     dblogin_id, 
     email_Id, 
     userlevel, 
     facility_id, 
     supervisor, 
     department, 
     winloginid) = (select jobtitle, 
           last_name, 
           first_name, 
           dblogin_id, 
           email_Id, 
           userlevel, 
           facility_id, 
           supervisor, 
           department, 
           winloginid 
         from TEMP_ECOLAB_PERSONS TE 
         where TE.PERSON=P.PERSON); 

नोट अगर उस temp_ecolab_persons में नहीं हैं व्यक्तियों में मौजूद अन्य पंक्तियों कर रहे हैं, व्यक्ति तालिका में इन अतिरिक्त पंक्तियों अशक्त पर निर्धारित किया जाएगा कि (या द्वारा रिक्त नहीं बाधा त्रुटि के साथ विफल बयान का कारण बन सकता उपर्युक्त अद्यतन करें, यदि ऐसा है, तो आपको इन्हें प्रतिबंधित करने के लिए अद्यतन कथन पर एक खंड की आवश्यकता हो सकती है, उदाहरण के लिए यदि मुझे पता है कि ईमेल_आईडी फ़ील्ड कुछ रिकॉर्ड पर आबादी है लेकिन दूसरों पर नहीं, तो मैं केवल उन पंक्तियों के लिए अद्यतन को सीमित कर सकता हूं के रूप में

UPDATE PERSONS P 
    SET (jobtitle, 
     last_name, 
     first_name, 
     dblogin_id, 
     email_Id, 
     userlevel, 
     facility_id, 
     supervisor, 
     department, 
     winloginid) = (select jobtitle, 
          last_name, 
          first_name, 
          dblogin_id, 
          email_Id, 
          userlevel, 
          facility_id, 
          supervisor, 
          department, 
          winloginid 
         from TEMP_ECOLAB_PERSONS TE 
         where TE.PERSON=P.PERSON) 
    WHERE email_id is null; 
संबंधित मुद्दे