数组里的值和实际查询出来的不一样啊

jiayou55 2013-05-15 05:53:58
我自定义了一个数组;
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





...全文
132 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
u010412956 2013-05-17
  • 打赏
  • 举报
回复
引用 2 楼 jiayou55 的回复:
[quote=引用 1 楼 u010412956 的回复:] 那肯定了。。。 存储过程里面的dbms_output.put_line(o_r.next(i)); 这个会输出到dbms output
是啊 这个我知道啊,但就是为什么会输出的是数字呢[/quote] for i in 0..o_r.count   loop    dbms_output.put_line(o_r.next(i));   end loop; 你这里输出的不是数字能是啥呢?
jiayou55 2013-05-17
  • 打赏
  • 举报
回复
引用 1 楼 u010412956 的回复:
那肯定了。。。 存储过程里面的dbms_output.put_line(o_r.next(i)); 这个会输出到dbms output
是啊 这个我知道啊,但就是为什么会输出的是数字呢
zlc王丽 2013-05-17
  • 打赏
  • 举报
回复
o_r.next(i)是下一个索引 取值要o_r(i)
u010412956 2013-05-15
  • 打赏
  • 举报
回复
那肯定了。。。 存储过程里面的dbms_output.put_line(o_r.next(i)); 这个会输出到dbms output

17,089

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧