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_A
、PACK_B
或 PACK_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;
/
我有一个 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_A
、PACK_B
或 PACK_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;
/