问题描述
嗨,团队问汤姆,
最近,我遇到了一些代码,其中开发人员在另一个存储过程中编写了四个或五个存储过程。代码编译得很好。我一直认为要编写这样的存储过程,它们应该在一个包中。我不是PL/SQL方面的专家,也找不到任何关于这是否是一种良好做法的信息。这样做的利弊是什么?
谢谢,
阿伦
最近,我遇到了一些代码,其中开发人员在另一个存储过程中编写了四个或五个存储过程。代码编译得很好。我一直认为要编写这样的存储过程,它们应该在一个包中。我不是PL/SQL方面的专家,也找不到任何关于这是否是一种良好做法的信息。这样做的利弊是什么?
谢谢,
阿伦
专家解答
你是说这样的事?
就我个人而言,我不是粉丝。正如你所建议的,我更喜欢做一个包装,像这样:
在声明部分 (嵌套或本地子程序) 中定义过程的好处通常与子程序相同: 您可以在单个位置定义可以多次重用的逻辑。如果一个过程需要多次运行同一进程,这可以使您的代码更易于维护。
缺点是嵌套子程序仅适用于定义它们的过程。这使得它们更难测试并限制重用。在上面的第一个例子中,如果你发现你想在另一个过程中调用do_这 (),你需要重构你的代码。
而如果它是一个包级别的过程,则可以在整个包的其余部分中重用它。或将其添加到软件包规范中,以使其公开可用。
create or replace procedure p as
procedure do_this as
begin
dbms_output.put_line ( 'THIS' );
end do_this;
procedure do_that as
begin
dbms_output.put_line ( 'THAT' );
end do_that;
begin
do_this();
do_that();
end p;
/就我个人而言,我不是粉丝。正如你所建议的,我更喜欢做一个包装,像这样:
create or replace package body pkg as
procedure do_this as
begin
dbms_output.put_line ( 'THIS' );
end do_this;
procedure do_that as
begin
dbms_output.put_line ( 'THAT' );
end do_that;
procedure p as
begin
do_this();
do_that();
end p;
end;
/在声明部分 (嵌套或本地子程序) 中定义过程的好处通常与子程序相同: 您可以在单个位置定义可以多次重用的逻辑。如果一个过程需要多次运行同一进程,这可以使您的代码更易于维护。
缺点是嵌套子程序仅适用于定义它们的过程。这使得它们更难测试并限制重用。在上面的第一个例子中,如果你发现你想在另一个过程中调用do_这 (),你需要重构你的代码。
而如果它是一个包级别的过程,则可以在整个包的其余部分中重用它。或将其添加到软件包规范中,以使其公开可用。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




