可以编译几个Oracle Pl / SQL包进行原子操作吗?

时间:2010-04-23 08:35:07

标签: oracle plsql compilation atomic

如果我将N pl / sql包部署到Oracle DB,我可以将其编译原子化,即在成功编译所有包之后将应用这些包中的更改吗?

3 个答案:

答案 0 :(得分:3)

CREATE OR REPLACE和ALTER PACKAGE是DDL语句,每个单独的DDL语句都是离散事务。在之前和每个DDL命令之后发出一个COMMIT ;这就是DDL没有回滚的原因。

在我看来,您有配置管理问题。配置管理和源代码管理是解决它的方法。在版本控制下保留所有PL / SQL脚本(哎呀,只是所有脚本)。当您部署某些PL / SQL程序的新版本时,请检查以前的版本(进入单独的子目录,或者在您的deploymenet机制下有意义的任何内容)。然后,如果您的软件包的新版本出现任何问题,那么重新部署旧版本就很容易了。

答案 1 :(得分:3)

由于软件包是可编辑的,您可以查看edition-based redefintion。这将为您提供一种在包的版本之间进行原子切换的方法。

答案 2 :(得分:2)

这里的其他答案都很好(例如,基于版本的重新定义,可在11gR2中获得)。

另一个选项由PL/SQL Developer提供,可以配置为在“真正的”编译之前进行测试编译(将包编译为替代名称)。