2013-06-21 8 views
5

एक नए टेबल फ़ील्ड पर कुछ परीक्षण करने के लिए, मैं अपने परीक्षण डेटाबेस में मौजूदा रिकॉर्ड पर कुछ मानों को नकली करना चाहता हूं। मैं एक तालिका में हर 8 वें रिकॉर्ड के लिए एक मूल्य असाइन करना चाहता हूँ। मैं आसानी से इस सिंटैक्स का उपयोग हर 8 वीं रिकॉर्ड का चयन कर सकते हैं:ओरेकल एसक्यूएल अद्यतन प्रत्येक एनएच पंक्ति

select * 
from 
    (select rownum rn 
    , jeffs_field_to_update 
    from jeff) 
where mod(rn, 8) = 0; 

हालांकि, मैं काफी एसक्यूएल के लिए नया हूँ, और मैं एक अद्यतन बयान में बदलने के लिए सक्षम होने के लिए नहीं कर पा रहे। मुझे एनएच रिकॉर्ड चुनने के बारे में बहुत सारे जवाब मिलते हैं, लेकिन मुझे पहले से ही यह मिल गया है। किसी भी तरह की सहायता की सराहना की जाएगी।

+0

अपनी मेज एक प्राथमिक कुंजी है? क्या आदेश "हर 8 वें रिकॉर्ड" को नियंत्रित करता है या परवाह नहीं करता कि कौन सी पंक्तियां अपडेट की जाती हैं? – APC

+0

मैंने मिखाइल के जवाब का उपयोग करके समाप्त किया, लेकिन आपके प्रश्न का उत्तर देने के लिए, मुझे वास्तव में परवाह नहीं था कि कौन से अपडेट किए गए थे - मैं सिर्फ एक बड़ी सबसेट चाहता था, जो पूरे टेबल में वितरित किया गया था। – Travis

उत्तर

5

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

update jeff 
set jeffs_field_to_update = value 
where id in 
(select id 
from 
    (select rownum rn 
    , jeff.id 
    from jeff) 
where mod(rn, 8) = 0) 
+0

धन्यवाद! यह पूरी तरह से काम करता है। – Travis

1

अपनी मेज मान लिया जाये कि एक विशिष्ट आईडी है प्रत्येक पंक्ति की पहचान करने के लिए, आप कुछ इस तरह कर सकते हैं:

update jeff 
    set . . . 
    where id in (select id 
       from (select rownum as rn, id 
         from jeff 
        ) 
       where mod(rn, 8) = 0 
       ) 

तुम भी एक इनलाइन updatable दृश्य के साथ ऐसा करने में सक्षम होना चाहिए (here देखें):

update (select jeffs_field_to_update 
     from (select rownum rn, jeffs_field_to_update 
       from jeff) 
     where mod(rn, 8) = 0 
     ) toupdate 
    set . . . 
1

भी कुंजी के बिना, आप इस उद्देश्य के लिए ओरेकल में rowid उपयोग कर सकते हैं।

update mytable 
set mycol = new_value 
where rowid in 
(select rowid from 
    (select rownum rn, id from mytable) 
where mod(rn, 8) = 0) 
+0

यहां सभी अच्छे उत्तरों के जवाब दिए गए हैं। धन्यवाद! – Travis

4

एक छोटा जवाब:

UPDATE jeff 
SET jeffs_field_to_update = value 
WHERE mod(DBMS_ROWID.ROWID_ROW_NUMBER(ROWID), 8)=0; 
संबंधित मुद्दे