2012-05-29 19 views
16

वहाँ ऐसा करने के लिए एक रास्ता है एक ओरेकल में, कुछ इस तरह "प्रत्येक के लिए":लूप के माध्यम से पूर्व निर्धारित मान

begin 
    for VAR in {1,2,5} 
    loop 
    dbms_output.put_line('The value: '||VAR); 
    end loop; 
end; 

मैं जानता हूँ कि आप की तरह कुछ कर सकते हैं:

begin 
    for VAR in 1..5 
    loop 
    if VAR in(1,3,5) then 
     dbms_output.put_line('The value: '||VAR); 
    end if; 
    end loop; 
end; 

लेकिन प्रतिसाद नहीं एक अच्छा तरीके से ऐसा करने का कोई तरीका नहीं है? मूल्यों का एक सेट परिभाषित करना और उनके माध्यम से पुनरावृत्त करना?

धन्यवाद।

+0

किसी तालिका में मानों की सूची रखें। अब आप एक कर्सर का उपयोग कर तालिका में मानों के माध्यम से लूप कर सकते हैं। – Rene

उत्तर

28

आप ऐसा कर सकता है, हालांकि शायद के रूप में चालाक नहीं के रूप में आप चाहते हैं:

declare 
    type nt_type is table of number; 
    nt nt_type := nt_type (1, 3, 5); 
begin 
    for i in 1..nt.count loop 
    dbms_output.put_line(nt(i)); 
    end loop; 
end; 

आप डेटाबेस में एक प्रकार बनाते हैं:

create type number_table is table of number; 

तो आप ऐसा कर सकते हैं:

begin 
    for r in (select column_value as var from table (number_table (1, 3, 5))) loop 
    dbms_output.put_line(r.var); 
    end loop; 
end; 
+6

असल में आपको डीबी में एक प्रकार बनाने की आवश्यकता नहीं है, आप 'आर के लिए' कर सकते हैं (तालिका से कॉलम_वैल्यू चुनें (sys.dbms_debug_vc2coll (1,3,5)) लूप ' –

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