【发布时间】:2015-08-13 13:24:29
【问题描述】:
我创建了 3 个存储过程。他们的每个功能是:
1. proc_insertleveluser -> 插入“leveluser”表并返回最后插入的id
2. proc_insertpermissiondtl -> 插入“permission_dtl”表并返回最后插入的id
3. proc_insert_relation_lpd -> 使用过程 1 和 2 提供的数据插入“lvl_permission_dtl”表
proc_insertleveluser
create or replace procedure proc_insertleveluser(level_desc varchar, level_ int, department_id varchar, r_id_level out int)
as
begin
insert into leveluser (level_desc, level_, department_id) values (level_desc, level_, department_id)
returning id_level into r_id_level;
commit;
end;
proc_insertpermissiondtl
create or replace procedure proc_insertpermissiondtl(status_ int, entry_ int, view_ int, modify_ int, delete_ int, approval_ int, r_id_p_dtl out int)
as
begin
insert into permission_dtl (status_, entry_, view_, modify_, delete_, approval_)
values(status_, entry_, view_, modify_, delete_, approval_)
returning id_p_dtl into r_id_p_dtl;
commit;
end;
和 proc_insert_relation_lpd
create or replace procedure proc_insert_relation_lpd(lu_level_desc varchar, lu_level_ int, lu_department_id varchar)
as
r_id_level int; /* r_ is for return */
r_id_p_dtl int;
type arr_id_p_dtl is varray(13) of int;
arraynya arr_id_p_dtl := arr_id_p_dtl();
begin
proc_insertleveluser(lu_level_desc, lu_level_, lu_department_id, r_id_level);
for i in 1..arraynya.count loop
proc_insertpermissiondtl(0, 0, 0, 0, 0, 0, r_id_p_dtl);
arraynya(i) := r_id_p_dtl;
end loop;
/* more code here to insert to "lvl_permission_dtl" table */
commit;
end;
当我执行代码时,1 条记录添加到“leveluser”表中,但没有添加到“permission_dtl”表中。似乎 for 循环内的代码没有执行。
这是什么原因造成的? “arraynya”变量是空的,所以 for 循环不会执行吗?还是有其他问题? :)
【问题讨论】:
-
看着
proc_insert_relation_lpd,在arraynya使用for语句之前,我看不到任何东西可以放入arraynya。你期待别的吗?也许你打算使用arraynya.limit而不是使用arraynya.count? -
好吧,在“开始”语句之前,我想从 arr_id_p_dtl 创建一个空的可变数组“arraynya”,这是一个 13 长度的可变数组,然后用返回的值填充“arraynya”中的每个索引for 循环上的 proc_insertpermissiondtl ......这是正确的方法吗?
-
正如我所说,我认为您想在
while循环中使用arraynya.limit而不是arraynya.count。祝你好运。 -
哦,我是多么愚蠢..非常感谢,我现在明白了..我认为“.count”类似于“.length”或类似的东西..:D
-
有关可用收集方法的文档,请参阅 PL/SQL Reference: Using Collection Methods。
标签: oracle stored-procedures plsql varray