Oracle PLSQL过程,该过程获取依赖的包引用作为参数

Oracle PLSQL过程,该过程获取依赖的包引用作为参数,oracle,stored-procedures,plsql,refactoring,Oracle,Stored Procedures,Plsql,Refactoring,我有一个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 ...

我有一个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\u COMMON.PROC\u A
应该从哪个包
PACK\u A
PACK\u B
PACK\u C
调用过程
PROC\u B


如何实现这一点?

如果真的必须这样做,则需要为公共进程a提供一个参数,并使用该参数来说明要调用哪个进程B

例如:


Thx,是的,这是一个可行的解决方案。但我更愿意提供该包作为参考。有没有办法做到这一点?你说的“作为参考”是什么意思?我指的是包的对象参考。我认为“ref coursors”背后也有类似的语义。据我所知,这是不可能的。另一种方法是将proc_a拆分为2个公共部分,然后在包a、b和c中调用common.proc_a_pt_1、proc_b、common.proc_a_pt_2
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;
/