如果重新编译规范,是否必须重新编译主体
is it mandatory to recompile body if you recompile specification
我在包规范中有一个变量。我每次都只修改那个变量。
我每次进行这些更改时都需要重新编译 body
吗?
实际上我很困惑,当你需要重新编译时package body
,因为我并不是在所有情况下都编译它。
oracle 中的包在会话中是有状态的,因此如果您从 DB 更改包规范或正文并且该包在应用程序的某个会话中使用,您将收到包状态已被丢弃的错误。但如果当前未通过任何会话访问包,则这不是问题。
但是,如果你说的是改变包和包体需要重新编译? --> 那么答案是否定的
在此处查看小演示:
正在创建包规范或正文:
SQL> create or replace package p
2 as
3 num number := 123;
4 function f(p_in number) return number;
5 end p;
6 /
Package created.
SQL>
SQL> create or replace package body p
2 as
3 function f(p_in number) return number is
4 begin
5 return num;
6 end f;
7 end p;
8 /
Package body created.
SQL>
调用包的函数:
SQL> select p.f(2) from dual;
P.F(2)
----------
123
SQL>
更改包规格:
SQL> create or replace package p
2 as
3 num number := 456;
4 function f(p_in number) return number;
5 end p;
6 /
Package created.
SQL>
在不改变body的情况下调用包的函数:
SQL> select p.f(2) from dual;
P.F(2)
----------
456
SQL>
哇哦!!!有效。
我在包规范中有一个变量。我每次都只修改那个变量。
我每次进行这些更改时都需要重新编译 body
吗?
实际上我很困惑,当你需要重新编译时package body
,因为我并不是在所有情况下都编译它。
oracle 中的包在会话中是有状态的,因此如果您从 DB 更改包规范或正文并且该包在应用程序的某个会话中使用,您将收到包状态已被丢弃的错误。但如果当前未通过任何会话访问包,则这不是问题。
但是,如果你说的是改变包和包体需要重新编译? --> 那么答案是否定的
在此处查看小演示:
正在创建包规范或正文:
SQL> create or replace package p
2 as
3 num number := 123;
4 function f(p_in number) return number;
5 end p;
6 /
Package created.
SQL>
SQL> create or replace package body p
2 as
3 function f(p_in number) return number is
4 begin
5 return num;
6 end f;
7 end p;
8 /
Package body created.
SQL>
调用包的函数:
SQL> select p.f(2) from dual;
P.F(2)
----------
123
SQL>
更改包规格:
SQL> create or replace package p
2 as
3 num number := 456;
4 function f(p_in number) return number;
5 end p;
6 /
Package created.
SQL>
在不改变body的情况下调用包的函数:
SQL> select p.f(2) from dual;
P.F(2)
----------
456
SQL>
哇哦!!!有效。