销毁 Oracle PLSQL 对象
Destroy Oracle PLSQL Object
有没有办法销毁 PL/SQL 对象,比如一条记录?
在visual pascal中,我们可以使用FreeAndNil(object),这个过程释放对象使用的内存,并指向Nil(null),从而销毁对象。
我想知道是否有办法在 PLSQL object/record 上执行此操作,或者我是否应该为其分配 null。
您可以将行类型设置为 null
,没问题。
编译正常:
declare
r dual%rowtype;
begin
r := null;
end;
如果一个变量失去作用域(所以在 end;
之后),Oracle 将自动销毁它,因此不需要将它设置为 null
,或以任何方式释放它。
问题是包有一个全局变量(包规范中声明的变量)。
客户端应用程序启动了一个执行此包中函数的事务;此函数更改了全局变量值。然后,另一个依赖于变量值的函数被调用。这导致了问题。
结论很明显:不要使用全局变量。
当然,还有其他解决方案,例如关闭交易(从而像 Patrick Hofman 解释的那样销毁变量)。
就像我说的,这是遗留软件...我重构了代码,这个问题(以及其他一些问题)消失了。感谢您的帮助!
有没有办法销毁 PL/SQL 对象,比如一条记录?
在visual pascal中,我们可以使用FreeAndNil(object),这个过程释放对象使用的内存,并指向Nil(null),从而销毁对象。
我想知道是否有办法在 PLSQL object/record 上执行此操作,或者我是否应该为其分配 null。
您可以将行类型设置为 null
,没问题。
编译正常:
declare
r dual%rowtype;
begin
r := null;
end;
如果一个变量失去作用域(所以在 end;
之后),Oracle 将自动销毁它,因此不需要将它设置为 null
,或以任何方式释放它。
问题是包有一个全局变量(包规范中声明的变量)。
客户端应用程序启动了一个执行此包中函数的事务;此函数更改了全局变量值。然后,另一个依赖于变量值的函数被调用。这导致了问题。
结论很明显:不要使用全局变量。
当然,还有其他解决方案,例如关闭交易(从而像 Patrick Hofman 解释的那样销毁变量)。
就像我说的,这是遗留软件...我重构了代码,这个问题(以及其他一些问题)消失了。感谢您的帮助!