我自定义了一个数组;
create or replace type array_list as varray(10000) of varchar2(100);创建了一个存储过程(目的是将数据库表里的信息查询出来,并拼接成json格式的字符串放在数组里):CREATE OR REPLACE PROCEDURE get_quanxian_test(
        USERNAME       IN  VARCHAR2    /** 用户名 **/
    ,   o_r            OUT ARRAY_LIST  /** OUTPUT RESULT **/
    )IS
   var_username  r_us.username%TYPE;
   var_moule_id  module.code%TYPE;
   var_code      module.code%TYPE;BEGIN
  o_r:=NEW ARRAY_LIST();
  o_r.EXTEND;o_r(o_r.LAST):='[';
  FOR w_rec IN(
    select m.title,      /**权限名:压力容器管理子系统**/
           m.path,       /**路径**/
           r.username,   /**登录名:admin**/
           x.moule_id    /**权限id**/
      from xtqxb x,
           r_us r,
           module m
     where x.role_id=r.role_id
       and m.code=x.moule_id
       and lengthb(x.moule_id)=2
       and r.username=USERNAME
     order by r.username,x.moule_id)
  LOOP
     var_moule_id:=w_rec.moule_id;
     IF (var_moule_id IS NOT NULL) THEN
     o_r.EXTEND;o_r(o_r.LAST):='{';
     o_r.EXTEND;o_r(o_r.LAST):='"url":"'||var_moule_id||'",';
     o_r.EXTEND;o_r(o_r.LAST):='"text":"'||w_rec.title||'",';
     o_r.EXTEND;o_r(o_r.LAST):='"children":[';
     end if;  END LOOP;
  for i in 0..o_r.count
  loop
   dbms_output.put_line(o_r.next(i));
  end loop;
  END;
我单独用这个sql语句查询得到的结果是这样的:            TITLE          PATH   USERNAME   MOULE_ID    
1 压力容器管理子系统   /...     admin   01
2 压力容器检验子系统   /...     admin   02
3 压力管道管理子系统   /...     admin   03
4 压力管道检验子系统   /...     admin   04
5 安全阀校验子系统  /...     admin   06
6 数据交换子系统 /...     admin   07
7 信息中心 /...         admin   08
8 系统管理 /...         admin   09
9 数据管理 /...         admin   10
10 数据字典 /...         admin   11
然后我右键这个存储过程测试了一下:username=‘admin’;
但是最后dbms output里面输出的值怎么会是这样的呢,搞不明白为什么啊
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
 
存储过程数组测试结果