存放PL / SQL块的地方

时间:2011-09-09 15:39:40

标签: oracle stored-procedures plsql

下面的问题解决方案是否正确存储PL / SQL的位置。

您想要创建一个计算客户订单折扣的PL / SQL块cof代码。 - 此代码将从多个位置调用,但仅在程序单元ORDERTOTAL中调用。 存储计算折扣的代码的最合适位置是什么?     

A. A stored procedure on the server.
B. A block of code in PL/SQL library.
C. A standalone procedure on the client machine.
D. A block of code in the body of the program unit ORDERTOTAL.
E. A local subprogram defined within the program unit ORDERTOTAL.

ANSWER: E

2 个答案:

答案 0 :(得分:2)

正如Ranzo notes其他几个答案也是合理的。那么,为什么 E 是正确答案?因为问题要求代码最合适的位置

让我们分解吧。

逻辑需要从几个地方调用。因此有必要将其定义为自己的函数(因为我们不想重复相同的代码)。

同时,仅从ORDERTOTAL程序单元调用客户折扣逻辑。因此,我们不希望将其作为独立过程或打包函数公开,可以由其他程序调用。这排除了 A B

所以最好的地方是 E ,即ORDERTOTAL程序的声明部分。类似的东西:

 create procedure ordertotal
     (custid in pls_integer
      , orderid in pls_integer)
 is
     ln_running_total number;
     ....
     function calc_discount 
        (custid in pls_integer)
        return number
     is
  ....

现在,如果ORDERTOTAL是一个打包过程,我们可以选择将CALC_DISCOUNT()作为私有函数(在正文中定义但未在规范中声明)。但总的来说,最好尽量保持范围尽可能紧,除非有合理的可能性,将来其他程序将使用该功能。

对于记录, C 是错误的,因为服务器无法访问客户端声明的内容, D 错误,因为它无法编译。


在搜索此问题的文字版本时,我找到了一个PDF版本here,其正确答案为 A 。 8-)另一个提供盗版考试的网站说正确的答案是 B 。所以好消息是,那些认为他们可以通过简单地学习答案来破解测试的人将会失败。

答案 1 :(得分:0)

除了“C”之外的所有东西都是合理的。这些Oracle测试已经进入细节,努力使它们变得更难。我认识几个不能传递它们的优秀Oracle DBA,因为它们不是关于概念,而是关于行话和技巧。

E是最佳答案,它将子程序本地化为调用程序。关键词是本地的。

当然,它也存储在DB服务器(A)上,它实际上是一个代码块(B - 虽然“库”不是PL / SQL说话),它实际上是一个块ORDERTOTAL(D)中的代码。

祝你的考试顺利,并确保专注于概念。