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里的数据?过路的大牛,给指点一下吧愁煞少牛头
var tt varraystr;
exec pkg_rm.QASSET_BY_INV_PROD_STS(:tt,1,1,1,1);但是总是报错,还要对tt进行初始化是吧?
然后应该在哪儿执行呢,我用的是plsql developer。是该在command window还是sql window里执行呢。然后执行完怎么查看varraystr里的数据?过路的大牛,给指点一下吧愁煞少牛头
tt varraystr;
begin
pkg_rm.QASSET_BY_INV_PROD_STS(tt,1,1,1,1);
end;
/
java调用oracle存储过程的自定义类型(可变数组)。
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.
你用的是神马东东?还有cause功能,这么好
数组也要少用,oracle有现成的关系表数据结构,和处理
这种关系的SQL语句,为啥还习惯象其它高级语言一样使用对象(记录)数组呢?
比如,可以直接使用SQL,如果需要中间表,可以使用临时表。
这是oracle的官方文档
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里的元素含有多个字段,是不是这个原因呢?
这是不是就意味着木有查询到数据