我创建了 3 个存储过程。它们的每个功能是:
1. proc_insertleveluser -> 插入“leveluser”表并返回最后插入的 id
2. proc_insertpermissiondtl -> 插入“permission_dtl”表并返回最后插入的 id
3. proc_insert_relation_lpd -> 插入“lvl_permission_dtl”包含程序 1 和 2 提供的数据的表
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 循环不会执行吗?还是有其他问题?:)