PL / SQL包中内部程序转发声明的优点

时间:2017-01-14 20:21:47

标签: oracle plsql

说我有以下套餐(请注意评论):

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;

在内部包裹体程序中使用前瞻性声明的优点/缺点是什么? 它对性能有影响吗? 同样,在宣言部分明确编写内部程序是否存在任何优势/劣势?

1 个答案:

答案 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无法正确处理它们。这可能会导致对象浏览器混淆,单击对象可能会转到前向声明而不是完整的代码定义。