2013-09-27 17 views
5

Oracle pl/sql'de java Hashmap gibi bir veri türü oluşturabilirim.PL/SQL veri yapısı

Örneğin;

type emp_rec_type is record (emp_id number,emp_salary number); 
emp_rec emp_rec_type; 

type emp_assoc_array is table of emp_rec_type indexed by varchar2(30); 
emp_map emp_assoc_array; 
Bunu elde edilebilir

emp_rec.emp_id := 1; 
    emp_rec.salary := 1000; 
    emp_map('Rohan') := emp_rec; 

altına yapabilmek istiyorum

? İç içe geçmiş tabloları kullanamıyorum çünkü yalnızca tamsayı ile dizine ekleyebiliyorum. İlişkisel dizilerle, nesne türünü öznitelik olarak kullanamıyorum.

Ayrıca, bir nesne veya şema veri türü oluşturmaya gerek kalmadan bunu yapmak ister. Lütfen bir şey önerebilir misiniz? (10g bence beri)

+3

Zaten örnekte cevabım var. Küçük düzeltme. Dizine göre endekslenmez, daha ziyade 'index by' ve gitmeniz iyidir. –

cevap

12

PL/SQL size VARCHAR2 tarafından dizine associative arrays tanımlayabilirsiniz:

SQL> DECLARE 
    2  TYPE map_varchar IS TABLE OF VARCHAR2(30) INDEX BY VARCHAR2(30); 
    3  l map_varchar; 
    4 BEGIN 
    5  l('A') := 'alpha'; 
    6  l('B') := 'beta'; 
    7  dbms_output.put_line(l('A')); 
    8 END; 
    9/

alpha 

Dahili olarak, ben yapı daha bir HashMap daha bir ikili ağacı haritası gibi olduğunu düşünüyorum.

Tabii ki PL/SQL kayıtları veya SQL nesneleri saklayabilirsiniz:

SQL> DECLARE 
    2  TYPE emp_rec_type IS RECORD (emp_id NUMBER,emp_salary NUMBER); 
    3  TYPE map_varchar IS TABLE OF emp_rec_type INDEX BY VARCHAR2(30); 
    4  l_emp emp_rec_type; 
    5  l_map map_varchar; 
    6 BEGIN 
    7  l_emp.emp_id := 1; 
    8  l_emp.emp_salary := 1000; 
    9  l_map('A') := l_emp; 
10  -- you can also affect record values directly 
11  l_map('B').emp_id := 2; 
12  l_map('B').emp_salary := 2000; 
13  dbms_output.put_line(l_map('A').emp_salary); 
14 END; 
15/

1000 

PL/SQL procedure successfully completed 
+0

Evet, ancak kayıt türünü VARCHAR2 yerine değer olarak kaydetmem gerekiyor. İlişkilendirme dizileri kullanılarak elde edilen değer nedir? – Rohan

+1

@rohan Of course =) –

+0

İlk örneğinizde l değişkenini kullanarak nasıl yineleyebilirim? – viveksinghggits