包规范中有一个变量。我每次都要修改那个变量。
每次进行这些更改时,是否都需要重新编译body
?
实际上,当您需要重新编译package body
时,我很困惑,因为我不是在每一种情况下都编译它。
发布于 2020-12-20 23:51:24
oracle中的包在会话中是有状态的,因此如果您从DB更改包规范或正文,并且在应用程序中的某些会话中使用该包,您将得到包状态已被丢弃的错误。但是,如果当前没有通过任何会话访问包,则这不是一个问题。
但是,如果您说的是包和包体的变化需要重新编译?->,那么答案是no.。
请参阅这里的小演示:
创建包规范或主体:
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>
调用包的函数而不更改主体:
SQL> select p.f(2) from dual;
P.F(2)
----------
456
SQL>
哇!它起作用了。
https://stackoverflow.com/questions/65388411
复制相似问题