下面的问题解决方案是否正确存储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
答案 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)
E是最佳答案,它将子程序本地化为调用程序。关键词是本地的。
当然,它也存储在DB服务器(A)上,它实际上是一个代码块(B - 虽然“库”不是PL / SQL说话),它实际上是一个块ORDERTOTAL(D)中的代码。
祝你的考试顺利,并确保专注于概念。