场景:package_a
引用package_b
现有代码如下所示:
PACKAGE package_a
IS
PROCEDURE do_something
IS
BEGIN
...
do_something_else(package_b.global_constant);
...
END;
END package_a;
我想做这样的事情:
PACKAGE package_a
IS
SYNONYM global_constant FOR package_b.global_constant;
PROCEDURE do_something
IS
BEGIN
...
do_something_else(global_constant);
...
END;
END package_a;
我不想创建一个局部变量或常量来设置w /另一个常量的值。 我不想创建一个公共同义词。
我希望它在包私有范围内。
答案 0 :(得分:4)
如果你真的想要它 - 而且我看不出它有什么好处,除了可能是一个较短的名字 - 你可以使用私人功能来获得类似的效果:
create package package_b is
global_constant number := 42;
end package_b;
/
create package body package_b is
end package_b;
/
create package package_a is
procedure do_something;
end package_a;
/
create package body package_a is
/* private function */
function global_constant return number is
begin
return package_b.global_constant;
end global_constant;
/* public procedure */
procedure do_something is
begin
dbms_output.put_line('Constant is: ' || global_constant);
end do_something;
end package_a;
/
set serveroutput on
exec package_a.do_something;
哪个输出:
Constant is: 42
因为该函数仅在包体中声明,所以它是包的私有,我认为这符合您的范围要求。
答案 1 :(得分:0)
SYNONYM
是一个SQL构造,所以不,你不能在包含范围的PL / SQL中声明SYNONYM
。
声明包中的同义词对于您拒绝的选项有什么好处,例如A中的包变量引用B中的常量?