0

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 ループは実行されませんか? それとも別の問題がありますか?:)

4

1 に答える 1