说我有以下套餐(请注意评论):
Create or replace package test_package_fdec as
procedure ext_proc1;
procedure ext_proc2;
end test_package_fdec;
/
Create or replace package body test_package_fdec as
procedure int_proc; -- forward declaration
procedure int_proc2 -- explicit internal procedure declaration
is
begin
dbms_output.put_line('this is int_proc2');
end int_proc2;
procedure ext_proc1
is
begin
dbms_output.put_line('Welcome to StackOverflow');
dbms_output.put_line('i will use an internal procedures with Forward Declarations');
int_proc;
end ext_proc1;
procedure ext_proc2
is
begin
dbms_output.put_line('Welcome to Oracle Forums');
dbms_output.put_line('i will use an internal procedures without Forward Declarations');
int_proc2;
end ext_proc2;
procedure int_proc
is
begin
dbms_output.put_line('used forward declaration');
end int_proc;
end test_package_fdec;
在内部包裹体程序中使用前瞻性声明的优点/缺点是什么? 它对性能有影响吗? 同样,在宣言部分明确编写内部程序是否存在任何优势/劣势?
答案 0 :(得分:3)
前向声明与性能无关。它们仅适用于在声明过程之前调用过程的极少数情况。
这是绝对必要的唯一时间是两个子程序相互引用,如下所示:
Create or replace package body test_package_fdec as
procedure int_proc; -- forward declaration
procedure int_proc2
is
begin
dbms_output.put_line('this is int_proc2');
int_proc;
end int_proc2;
procedure int_proc
is
begin
dbms_output.put_line('this is int_proc2');
int_proc2;
end int_proc;
end test_package_fdec;
/
有时,前瞻性声明因美容原因而有用。按照对您有意义的顺序列出代码非常重要,而不一定是调用代码的顺序。添加前向声明可以帮助您将代码保持在更合理的顺序。
转发声明的唯一缺点是某些IDE无法正确处理它们。这可能会导致对象浏览器混淆,单击对象可能会转到前向声明而不是完整的代码定义。