Oracle PLSQL过程,该过程获取依赖的包引用作为参数
我有一个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 ...
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;
/