我自定义了一个数组;
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
存储过程数组测试结果
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
存储过程数组测试结果
存储过程里面的dbms_output.put_line(o_r.next(i));
这个会输出到dbms output
是啊 这个我知道啊,但就是为什么会输出的是数字呢for i in 0..o_r.count
loop
dbms_output.put_line(o_r.next(i));
end loop;你这里输出的不是数字能是啥呢?
取值要o_r(i)