Oracle 将作用域赋予另一个过程中的私有过程,而无需转发声明
我有一个没有fwd的包规范,它有公共程序p1和p2 此外,im具有不带fwd的包体,该包体具有三个程序p1、p2和p3。这里p3是在p1之后创建但在p1内部使用的私有过程 然而,为了在p1内部使用p3,我们可以使用前向声明来提供范围 我需要知道是否有其他方法可以提供p3的作用域,以便我们可以在p1内部调用它,而无需使用转发声明Oracle 将作用域赋予另一个过程中的私有过程,而无需转发声明,oracle,stored-procedures,plsql,forward-declaration,Oracle,Stored Procedures,Plsql,Forward Declaration,我有一个没有fwd的包规范,它有公共程序p1和p2 此外,im具有不带fwd的包体,该包体具有三个程序p1、p2和p3。这里p3是在p1之后创建但在p1内部使用的私有过程 然而,为了在p1内部使用p3,我们可以使用前向声明来提供范围 我需要知道是否有其他方法可以提供p3的作用域,以便我们可以在p1内部调用它,而无需使用转发声明 create or replace package without_fwd is procedure p1; procedure p2; end without_fwd;
create or replace package without_fwd is
procedure p1;
procedure p2;
end without_fwd;
/
create or replace package body without_fwd is
procedure p1 is
begin
p3;
end;
procedure p2 is
begin
dbms_output.put_line('Success');
end;
procedure p3 is
begin
dbms_output.put_line('Success 2');
end;
end without_fwd;
/
对于家庭作业,我假设教授只是想让你先定义私有方法(顺便说一句,这通常比在现实世界中创建前向引用更常见) 如果
p3
仅用于p1
,则可以将其定义为p1
的一部分,而不是包的专用方法。在现实世界中,这有点不寻常——我从未见过一个经常使用这种方法的代码库,尽管我曾与使用这种方法的人交谈过。我偶尔会使用它来简化数据更改的临时匿名块,仅此而已
create or replace package body without_fwd
is
-- Public methods
procedure p1
is
procedure p3 is
begin
dbms_output.put_line('Success 2');
end;
begin
p3;
end;
procedure p2 is
begin
dbms_output.put_line('Success');
end;
end without_fwd;
除了在包体中的
p1
之前定义p3
?请注意,您的示例实际上似乎没有向前声明p3
?这是一个家庭作业,还是你正在试图解决一些业务问题?这更像是家庭作业问题,但我需要知道我们是否可以在公共过程中使用私有过程,而无需进行前向声明,或者不通过在包规范中指定p3将其公开
create or replace package body without_fwd
is
-- Public methods
procedure p1
is
procedure p3 is
begin
dbms_output.put_line('Success 2');
end;
begin
p3;
end;
procedure p2 is
begin
dbms_output.put_line('Success');
end;
end without_fwd;