菜鸟总是遭遇各种拦路。。。写了个存储过程,怎么在oracle里调用

jidu01 2011-06-09 02:52:55
procedure QASSET_BY_INV_PROD_STS(ResultTab out VARRAYSTR,invId number, prodId number, psts number, fsts number)

上面是我在包pkg_rm里建的一个存储过程,其中varraystr是我自定义的可变数组array类型。然后在java程序里总是报错,我想在oracle里测试下是不是存储过程的问题,但不知道怎么执行。。。

我是这样写的
var tt varraystr;
exec pkg_rm.QASSET_BY_INV_PROD_STS(:tt,1,1,1,1);

但是总是报错,还要对tt进行初始化是吧?
然后应该在哪儿执行呢,我用的是plsql developer。是该在command window还是sql window里执行呢。然后执行完怎么查看varraystr里的数据?

过路的大牛,给指点一下吧。。。。。。。。。。。。愁煞少牛头
...全文
218 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jidu01 2011-06-21
  • 打赏
  • 举报
回复
痛苦,结贴
jidu01 2011-06-09
  • 打赏
  • 举报
回复
在java程序里exception.getMessge()显示的是Index:1;size:0.。。。。。。。。。。。。
这是不是就意味着木有查询到数据
jidu01 2011-06-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 tangren 的回复:]
varray可变数组,一旦定义limit,则不能超时这个元素个数。

还有,看过你的包里的存储过程,处理数据尽量不要使用游标循环,
数组也要少用,oracle有现成的关系表数据结构,和处理
这种关系的SQL语句,为啥还习惯象其它高级语言一样使用对象(记录)数组呢?
比如,可以直接使用SQL,如果需要中间表,可以使用临时表。
[/Quote]
我也很痛苦,pl/sql对我来说好陌生,之前用oracle也就是建用户建表数据增删改查神马的,这几天接触了pl/sql后发现自己oracle还没入门呢。。。这个变长数组也是看别人写照着模仿写的。。。你说的是用pl/sql表吗?

刚才我执行了这块
declare
tt varraystr;
begin
pkg_esoprm.QASSET_BY_INV_PROD_STS(tt,4,-1,-1,-1);
for i in 1..10 loop
dbms_output.put_line(tt(i));
end loop;
end;
/
木有报错,但是木有看到数据输出,变长数组varraystr里的元素含有多个字段,是不是这个原因呢?
tangren 2011-06-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jidu01 的回复:]

引用 5 楼 bobo12082119 的回复:
ORA-06532:Subscript outside of limit
Cause: A subscript was greater than the limit of a varray
or non-positive for a varray or nested table.
Action: Check the program log……
[/Quote]

这是oracle的官方文档
tangren 2011-06-09
  • 打赏
  • 举报
回复
varray可变数组,一旦定义limit,则不能超时这个元素个数。

还有,看过你的包里的存储过程,处理数据尽量不要使用游标循环,
数组也要少用,oracle有现成的关系表数据结构,和处理
这种关系的SQL语句,为啥还习惯象其它高级语言一样使用对象(记录)数组呢?
比如,可以直接使用SQL,如果需要中间表,可以使用临时表。
jidu01 2011-06-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 bobo12082119 的回复:]
ORA-06532:Subscript outside of limit
Cause: A subscript was greater than the limit of a varray
or non-positive for a varray or nested table.
Action: Check the program logic and increase the varr……
[/Quote]

你用的是神马东东?还有cause功能,这么好
304的的哥 2011-06-09
  • 打赏
  • 举报
回复
ORA-06532:Subscript outside of limit
Cause: A subscript was greater than the limit of a varray
or non-positive for a varray or nested table.
Action: Check the program logic and increase the varray limit if necessary.
jidu01 2011-06-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 tangren 的回复:]
sqlplus的var不支持自定义的类型

需要使用pl/sql块来调用(sqlplus和pl/sql dev的command window、test window都可以)

declare
tt varraystr;
begin
pkg_rm.QASSET_BY_INV_PROD_STS(tt,1,1,1,1);
end;
/

[/Quote]


我定义的varraystr是varray(10000)of varchar2(2000)的,感觉挺大的了
jidu01 2011-06-09
  • 打赏
  • 举报
回复
执行后说是subscript outside of limit.......然后到包体里看错误的那块,就显示是定义的变成数组的extend方法那块
tangren 2011-06-09
  • 打赏
  • 举报
回复
sqlplus的var不支持自定义的类型

需要使用pl/sql块来调用(sqlplus和pl/sql dev的command window、test window都可以)

declare
tt varraystr;
begin
pkg_rm.QASSET_BY_INV_PROD_STS(tt,1,1,1,1);
end;
/

3,499

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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