2011-06-08 57 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