2010-09-14 8 views
12

लोग। यहां पीएल/एसक्यूएल में एक साधारण नमूना द्वि-आयामी सरणी है, जो पूरी तरह से काम कर रही है।पीएल/एसक्यूएल में रिकॉर्ड्स का संग्रह मैन्युअल रूप से कैसे प्रारंभ करें?

declare 
    type a is table of number; 
    type b is table of a; 

    arr b := b(a(1, 2), a(3, 4)); 
begin 
    for i in arr.first .. arr.last loop 
    for j in arr(i).first .. arr(i).last loop 
     dbms_output.put_line(arr(i) (j)); 
    end loop; 
    end loop; 
end; 

मैं क्या करने की जरूरत, RECORDS की एक तालिका के लिए कुछ इसी तरह तैयार करना है। इस तरह:

type a is record(a1 number, a2 number); 
type b is table of a; 

सवाल है, मैं मैन्युअल सरणी इस तरह का प्रारंभ कर सकते हैं, या यह bulk collects या इसी तरह के द्वारा भरा जाना माना जाता है? ऊपर जैसा ही वाक्यविन्यास काम नहीं कर रहा है, और मैनुअल में कोई प्रारंभिक नमूना नहीं ढूंढ पाया।

उत्तर

14

वहाँ रिकॉर्ड के लिए नहीं "निर्माता" वाक्य रचना, है ताकि आप उन्हें इस तरह पॉप्युलेट करने के लिए है:

declare 
type a is record(a1 number, a2 number); 
type b is table of a; 
arr b := b(); 
begin 
arr.extend(2); 
arr(1).a1 := 1; 
arr(1).a2 := 2; 
arr(2).a1 := 3; 
arr(2).a2 := 4; 
end; 
+0

यह बहुत बुरा है। –

+0

हां। मुझे रिकॉर्ड्स संरचनाओं के लिए शायद ही कभी उपयोग किया गया है, जो कि% ROWTYPE का उपयोग कर तालिका या कर्सर से जुड़े हैं और फ़ेचिंग के लिए आसान हैं। –

+0

एचएम, ठीक है, मैं उन्हें किसी भी समय ज्ञात डेटा संरचना के साथ एक अस्थायी डेटा भंडारण की आवश्यकता है - जो कोड को कुछ प्रकार की आत्म-टिप्पणी करता है। शायद यह एक बुरा अभ्यास है। –

12

यह वस्तुओं के बिना काम करता है, लेकिन आप 'एक' मान प्रकार के लिए एक निर्माता समारोह की घोषणा करने के लिए है।

declare 
    type a is record(a1 number, a2 number); 
    type b is table of a; 

    arr b; 

    --Constructor for type a 
    function a_(a1 number, a2 number) return a is 
    r_a a; 
    begin 
    r_a.a1 := a1; 
    r_a.a2 := a2; 

    return(r_a); 
    end; 

begin 
    arr := b(a_(1, 2), a_(3, 4), a_(5, 6), a_(7, 8)); 

    for i in arr.first .. arr.last loop 
    dbms_output.put_line(arr(i).a1||', '||arr(i).a2); 
    end loop; 
end; 
+0

लवली! किसी को भी इसका पुन: उपयोग करने के लिए नोट करें, 'घोषणा' ब्लॉक में फ़ंक्शन परिभाषा आखिरी बात होनी चाहिए (और संकलन त्रुटि जो आपको मिलती है अन्यथा पूरी तरह से अनुपयोगी है)। –

+0

इसके अलावा, यदि आप 'पीएलएस -00222' में भागते हैं: नाम 'बी' के साथ कोई फ़ंक्शन इस दायरे में मौजूद नहीं है, तो संभवतः आपने तालिका परिभाषा में 'pls_integer द्वारा अनुक्रमणिका' जोड़ दी है। जैसे मैंने किया :) धन्यवाद @Shallow। –

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