【问题标题】:Place to store PL/SQL block [closed]存储 PL/SQL 块的地方[关闭]
【发布时间】:2011-11-13 21:57:10
【问题描述】:

对于应该将 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

【问题讨论】:

  • 我能知道,哪位先生投了反对票,所以我下次更正
  • 什么是正确的答案,是 E 正确的,因为我也对 A 感到困惑
  • “wht”、“tht”、“nxt”和“bcoz”的另一个 -1。
  • 这个问题是在 Oracle Forms 的上下文中吗?
  • 投了反对票(并关闭),因为作为图像,该问题在任何实际条件下都不可搜索,因此对任何人都没有任何用处。也缺少问题的上下文。

标签: oracle stored-procedures plsql


【解决方案1】:

除了“C”之外的所有内容都是合理的。这些 Oracle 测试已深入细节,以使它们变得更难。我知道有几个优秀的 Oracle DBA 无法通过考试,因为他们不是关于概念,而是关于术语和技巧。

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

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

祝你的测试好运,并确保专注于概念。

【讨论】:

  • 'libraries' 是一个 Oracle Forms 概念,其中常见的 Forms PL/SQL 过程存储在一个单独的文件中。
  • @Gary - 我很确定它使用库来表示“PL/SQL 包”
  • 实际上只有 A 和 E 是合理的。
【解决方案2】:

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

让我们分解一下。

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

同时,仅从 ORDERTOTAL 程序单元调用客户折扣逻辑。因此,我们不想将它公开为一个独立的过程或一个封装的函数,它们可以被其他程序调用。这排除了 AB

所以放置它的最佳位置是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。所以好消息是,那些认为他们可以通过简单地学习答案来破解测试的人将会失败。

【讨论】:

    猜你喜欢
    • 2014-12-26
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-02
    • 2020-10-04
    相关资源
    最近更新 更多