PL SQL 过程,它获取依赖包引用作为参数

PLSQL procedure, which gets the dependend package reference as a parameter

我有一个 Oracle PLSQL 过程,它在三个不同的包中看起来完全一样。

CREATE OR REPLACE PACKAGE BODY PACK_A 
AS
   PROCEDURE PROC_A
   IS 
      TYPE ref_c_data IS REF CURSOR RETURN data_rec%ROWTYPE;
      TYPE ref_c_items IS REF CURSOR RETURN items_rec%ROWTYPE;
   BEGIN
      ...
      PACK_A.PROC_B(ref_c_data, ref_c_items)
      ...
   END;
   PROCEDURE PROC_B
   -- This procedure is different in all three packages
   END;
END;
/

现在我想将 PACK_A.PROC_A 提取到一个公共包中,这样我就不必三次维护同一个源。我想……喜欢:

CREATE OR REPLACE PACKAGE BODY PACK_A 
AS
   PROCEDURE PROC_A
   IS
      TYPE ref_c_data IS REF CURSOR RETURN data_rec%ROWTYPE;
      TYPE ref_c_items IS REF CURSOR RETURN items_rec%ROWTYPE;
   BEGIN
      PACK_COMMON.PROC_A(ref_c_data, ref_c_items)
   END;
   PROCEDURE PROC_B
   -- This procedure is different in all three packages
   END;
END;
/

我遇到的问题是我不知道如何告诉 PACK_COMMON.PROC_A 程序 PACK_APACK_BPACK_C 过程 PROC_B 来自哪个包]应该叫什么?

我怎样才能做到这一点?

如果你真的必须这样做,你需要为公共过程 A 提供一个参数,并用它来说明你想调用哪个过程 B。

例如:

create package body pack_common
as
  procedure proc_a (p_proc_to_call varchar2)
  is
    ...
  begin
    ...
    if p_proc = 'PACK_A' then
       pack_a.proc_b;
    elsif p_proc = 'PACK_B' then
       pack_b.proc_b;
    ...
    end if;
    ...
  end proc_a;
end pack_common;
/