2011-06-08 53 views
3

如何在PL/SQL中定義以下結構:如何在Oracle PL SQL中定義類似結構的字典?

包含多行的字符串列表。

實施例:

'User A' 
    --> 
     (1) 
      --> 
       1 
     (2) 
      --> 
       2 


'User B' 
    --> 
     (1) 
      --> 
       0 
     (2) 
      --> 
       9 

的整數被定義爲:

TYPE number_arry IS TABLE OF NUMBER INDEX BY BINARY_INTEGER; 

如何定義整個結構?

我要填寫此表中這種結構:

RowId | User_A | User_B 
------+--------+-------- 
1  |  1 |  0 
2  |  2 |  0 
3  |  3 |  9 

有了這些語句:

CURSOR c1 
     IS 
      SELECT User_A, User_B FROM my_table; 

OPEN c1; 
    LOOP 
     FETCH c1 
      BULK COLLECT INTO 
       my_dict('User A'), 
       my_dict('User B') 

     LIMIT 1000; 

     EXIT WHEN c1%NOTFOUND; 
    END LOOP; 

回答

8

你可以用以下結構:

SQL> CREATE TABLE my_table AS 
    2  SELECT 1 user_a, 0 user_b FROM dual 
    3  UNION ALL SELECT 2, 0 FROM dual 
    4  UNION ALL SELECT 3, 9 FROM dual; 

Table created 

SQL> DECLARE 
    2  CURSOR c1 IS 
    3  SELECT User_A, User_B FROM my_table; 
    4  TYPE number_arry IS TABLE OF NUMBER INDEX BY BINARY_INTEGER; 
    5  TYPE dictionary_type IS TABLE OF number_arry INDEX BY VARCHAR2(30); 
    6  l_dico dictionary_type; 
    7 BEGIN 
    8  OPEN c1; 
    9  LOOP 
10  FETCH c1 BULK COLLECT 
11   INTO l_dico('User A'), l_dico('User B') LIMIT 1000; 
12  EXIT WHEN c1%NOTFOUND; 
13  END LOOP; 
14  CLOSE c1; 
15 END; 
16/

PL/SQL procedure successfully completed 
+0

嗨文森特,感謝你的迴應,但是,我沒有發佈錯誤的問題,我已經更新了描述,請你再看看嗎? – 2011-06-08 09:55:17

+1

@stef:嗨Stef,我更新了我的答案,HTH – 2011-06-08 10:17:49