双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

oracle存储过程,输出参数为数组的问题?紧急求助!寝室疯了。。

bean115 bean115 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
首先写了一个包,包头声明了个自定义数组类型: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没有初始化呢?我也不知道在哪里初始化。。。

大侠救救我们吧
...全文

相关推荐

oracle存储过程超详细使用手册

oracle存储过程超详细使用手册,内容很详细,绝对受用

cplover25

Spring框架中调用Oracle存储过程的数组参数处理

存储过程是一组为了完成特定功能的SQL语句集,它被编译后存储在数据库中,可以通过指定的名称直接调用执行。存储过程可以接受输入参数并返回输出参数和结果集,使得在数据库层面上实现复杂的业务逻辑成为可能。此外,它们可以被授予特定的权限,从而增强安全性。Oracle提供了几种集合类型来模拟数组,包括VARRAY(可变数组)和TABLE(表类型)。VARRAY具有固定的上限,而TABLE类型则没有固定的大小限制。在创建这些类型时,需要定义其元素的数据类型以及可能的上限。

无畏道人

oracle数组存储过程批量插入

今天做了一个关于短消息批量删除的功能, 刚开始准备在后台用循环来逐条删除,后来因为其它功能模块也会用到大批量删除数据。 所以就决定用 数组作为存储过程的参数进行传值,在存储过程中批量删除。说实话这个选择有点得不偿失,本来以为上午就能搞定,谁知道从摸索到实现,居然发了大半天时间。

lijinglian

Mybatis传list参数调用oracle存储过程的解决方法

怎么利用MyBatis传List类型参数到数据库存储过程中实现批量插入数据?接下来通过本文给大家介绍Mybatis传list参数调用oracle存储过程,需要的朋友可以参考下

weixin_38699784

Spring访问传入数组参数的Oracle存储过程

NULL 博文链接:https://xiaogui9317170.iteye.com/blog/286401

weixin_38669628
评论 10
收藏 已收藏
分享
返回顶部
bean115
Oracle 17,133 成员 55,258 内容