【问题标题】:When does an Oracle Package Specification become INVALIDOracle 包规范何时变为无效
【发布时间】:2016-10-28 00:11:47
【问题描述】:

据我所知,可以在不影响规范的情况下替换和重新编译包体。包规范声明过程和函数,而不是定义它们,因此它们不能引用对象,这会使包规范无效。

我知道当一个包规范使用独立的子程序和其他包来定义它的变量时,它可以引用对象。在这种情况下,更改引用的对象可能会导致规范失效。

是否有任何其他方式可以使 Oracle 包规范依赖(引用)对象并在被引用对象更改或其他方式时变为无效?

【问题讨论】:

    标签: plsql oracle11g plsql-package


    【解决方案1】:

    在规范中可以定义变量或类型。如果变量是 table.column%type 包规范可能会受到用于定义变量的表上的任何 ddl 操作的影响。同样的情况是在包头我们定义游标的时候。

    如果变量定义引用的表和标题中使用的类型,我也会小心交换同义词。

    下一个场景是特权。如果包的所有者将失去一些授权(可以说是由于表重新创建)包规范也可能无效。

    我希望我写的东西有意义。

    【讨论】:

    • 感谢您的回答。当 table.column%type 用作 spec 中声明的子程序的参数类型时,对 table 的 DDL 操作是否会影响 spec。如果是这样,请在您的回答中提及这一点。
    • @chumakoff 我不确定包规范中的子程序是什么意思。但一般来说,如果你在包声明中有这样的引用 %type (或 rowtype),答案是肯定的,它会受到影响。
    • 子程序是一个过程或一个函数。当你在包规范中声明它时,你应该描述它的签名,即参数的类型和返回值的类型。例如:PROCEDURE my_proc(id employees.employee_id%TYPE)
    • @chumakoff 是的,如果您在程序包规范的标头中有参数 col%type 将在表上更改后无效。
    猜你喜欢
    • 2020-04-20
    • 2015-02-13
    • 2021-02-09
    • 2019-03-13
    • 2015-04-08
    • 2015-05-01
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    相关资源
    最近更新 更多