默认情况下,包具有会话持续性(或者直到包被重新编译),包的这种特性可能会带来一些问题:
1、导致无法预料的错误,比如使用包中的游标而未关闭,这样再以后程序中打开这个游标时会出现‘游标已经打开’的错误。
2、可能占用大量内存。
使用包的串行化:把包状态的声明周期从会话减少到一个程序的调用。
如何使用包的串行化?在包规范和包体中同时使用serially_reusable。
比如:package package_name
is
pragma serially_reusable;
...
end;
package body package_name
is
pragma serially_reusable;
...
end;
关于包的串行化:1、包使用的内存从SGA中分配,而不再从UGA中分配。
2、包在每一次调用时都要重新完成初始化