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

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





...全文
155 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
源码链接: https://pan.quark.cn/s/d5c270d5abd6 依据所提供的文档资料,可以掌握若干有关VirtualBox COM对象获取无法成功的问题及其应对措施。 VirtualBox作为一款广受欢迎的开源虚拟化工具,能够让用户在当前运行的操作系统上建立及执行虚拟环境。 COM(Component Object Model)对象是应用于Windows平台的一种技术,旨在促成软件组件之间的交互。 若获取VirtualBox的COM对象遭遇失败,则意味着在与VirtualBox进行交互时遇到了某些障碍,这或许源于注册表设置存在偏差或某些组件未能正确部署。 此类问题的显现通常与安装Genymotion前需先安装VirtualBox有关,但在安装VirtualBox后却遭遇COM对象获取失败的情形。 这种情况可能会干扰VirtualBox的正常运作,使用户无法进行虚拟机的管理或构建。 解决方案包括若干步骤,其核心在于对Windows注册表的编辑操作。 注册表是Windows操作系统用于存储配置数据的数据库,其中包含了系统软件与硬件的配置详情,亦涵盖了COM对象的相关信息。 一旦COM对象的注册资料出现异常,系统便无法准确加载及执行相应的组件。 根据文件所载信息,处理方案包含以下环节:1. 在Windows环境中通过“regedit”指令启动注册表编辑器。 此步骤涉及在开始菜单的运行窗口中键入指令并执行。 2. 随后,依照文件中的指引,需要在注册数据库中定位特定的键路径。 这些路径涵盖: - HKEY_CLASSES_ROOT\CLSID\{***-0000-0000-C000-***}\InprocServer32 - HKEY_CLASSES_ROOT\CLSID...
内容概要:本文介绍了一种基于局部高斯分布拟合能量驱动的活动轮廓模型,用于图像分割任务。该方法属于区域型主动轮廓模型,通过变分水平集方法实现轮廓演化,能够有效分割具有复杂边界或弱边界的图像目标。其核心思想是利用图像局部区域的灰度统计特性,构建基于高斯分布的能量函数,使轮廓在演化过程中对噪声具有较强鲁棒性,并能准确捕捉目标边缘。该模型特别适用于不均匀光照、低对比度等挑战性图像的分割场景,Matlab代码实现便于科研人员理解算法细节并进行二次开发。; 适合人群:具备一定图像处理基础,从事计算机视觉、医学图像分析、遥感影像处理等领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①解决传统边缘检测方法在噪声干扰下分割效果差的问题;②实现对灰度不均、边界模糊图像的精确分割;③为后续的图像识别、目标测量等任务提供高质量的分割结果;④作为学习水平集方法与主动轮廓模型的经典案例进行教学与研究。; 阅读建议:建议读者结合Matlab代码逐步调试运行,观察水平集函数的演化过程,深入理解能量泛函构造、梯度下降法求解及水平集更新机制,同时可尝试在不同类型的图像上测试算法性能并进行参数调优。

17,136

社区成员

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

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