Plsql Oracle软件包规范何时失效

Plsql Oracle软件包规范何时失效,plsql,oracle11g,plsql-package,Plsql,Oracle11g,Plsql Package,据我所知,可以在不影响规范的情况下更换和重新编译包体。包规范声明过程和函数,而不是定义它们,因此它们不能引用对象,这会使包规范无效 我知道,当包规范使用独立子程序和其他包来定义其变量时,它可以引用对象。在这种情况下,更改引用对象可能会导致规范无效 Oracle软件包规范是否有其他方式依赖于(引用)对象并在引用对象时失效?引用对象是chаnge还是其他方式?在规范中可以定义变量或类型。如果变量是table.column%type包规范可能会受到用于定义变量的表上的任何ddl操作的影响。同样的情况是

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

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


Oracle软件包规范是否有其他方式依赖于(引用)对象并在引用对象时失效?引用对象是chаnge还是其他方式?

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

对于由变量定义引用的表和标头中使用的类型,我也会小心地交换同义词

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


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

谢谢你的回答。当table.column%type用作规范中声明的子程序的参数类型时,该表上的DDL操作是否会影响规范。如果是,请在回答中提及这一点。@chumakoff我不确定在包规范中子程序是什么意思。但一般来说,如果在包声明中有这样的引用%type(或rowtype),答案是肯定的,它将受到影响。子程序是一个过程或函数。在包规范中声明它时,应该描述它的签名,即参数类型和返回值类型。例如:过程my_proc(id employees.employeed_id%TYPE)@chumakoff yes如果在过程包的头中有参数col%TYPE,则在表上进行alter后,规范将变得无效。