oracle存储过程,输出参数为数组的问题?紧急求助!寝室疯了。。
首先写了一个包,包头声明了个自定义数组类型:TYPE lgn IS TABLE OF NVARCHAR2(20);
在包体里写了存储过程如下:
procedure country_languages
(
country_n in NVARCHAR2,
c_n out NVARCHAR2,
l_ns out lgn,
ofls out lgn
) as
c_id NVARCHAR2(20);
l_id NVARCHAR2(20);
l_n NVARCHAR2(20);
o_n NVARCHAR2(20);
if_o char;
n number:=0;
cursor mycursor1 is
select b.language_id, b.country_id from wf_countries a, wf_spoken_languages b where a.country_name=country_n and b.country_id=a.country_id;
cursorrecord mycursor1%rowtype;
begin
l_id:='';
open mycursor1;
LOOP
fetch mycursor1 into cursorrecord;
exit when mycursor1%notfound;
l_id:=cursorrecord.language_id;
c_id:=cursorrecord.country_id;
select language_name into l_n from wf_languages where language_id=l_id;
select if_official into if_o from wf_spoken_languages where country_id=c_id and language_id=l_id;
n:=n+1;
l_ns(n):=l_n;
if if_o='1'then
ofls(n):=l_n;
end if;
end loop;
close mycursor1;
c_n:=country_n;
end country_languages;
现在存储过程编译通过,但是在命令行里调用存储过程时出错:
SQL> declare
2 -- Local variables here
3 i integer;
4 TYPE lgn IS VARRAY(20) OF NVARCHAR2(20); --可变数组
5 c_n NVARCHAR2(20);
6 l_ns varray;
7 ofls varray;
8 begin
9 -- Test statements here
10 traveler_assistance_package.country_languages('巴西', c_n,l_ns, ofls);
11 end;
12 /
l_ns varray;
*
第 6 行出现错误:
ORA-06550: 第 6 行, 第 13 列:
PLS-00201: 必须声明标识符 'VARRAY'
ORA-06550: 第 6 行, 第 13 列:
PL/SQL: Item ignored
ORA-06550: 第 7 行, 第 13 列:
PLS-00201: 必须声明标识符 'VARRAY'
ORA-06550: 第 7 行, 第 13 列:
PL/SQL: Item ignored
ORA-06550: 第 10 行, 第 61 列:
PLS-00320: 此表达式的类型声明不完整或格式不正确
ORA-06550: 第 10 行, 第 3 列:
PL/SQL: Statement ignored
并且在JSP里面调用的话,也会提示出错:
java.sql.SQLException: 无效的名称模式: FOF.lgn
明明lgn在包头里面已经声明了,怎么会出错呢?
是不是数组lgn没有初始化呢?我也不知道在哪里初始化。。。
大侠救救我们吧