本周我们公司一直在就如何编写SQL脚本进行辩论。
背景:我们的数据库是Oracle 10g(即将升级到11)。我们的DBA团队使用SQLPlus来将我们的脚本部署到生产环境中。
现在,我们最近的一次部署失败了,因为它同时使用了分号和正斜杠(/)。分号位于每个语句的末尾,斜线位于语句之间。
/
alter table foo.bar drop constraint bar1; / alter table foo.can drop constraint can1; /
稍后在脚本中添加了一些触发器,创建了一些视图以及一些存储过程。同时使用;和和/导致每个语句运行两次会导致错误(尤其是在插入操作上,该操作必须是唯一的)。
;
在SQL Developer中不会发生这种情况,在TOAD中不会发生这种情况。如果您运行某些命令,那么如果没有这些命令,它们将无法工作/。
在PL / SQL中,如果您有子程序(DECLARE,BEGIN,END),则使用的分号将被视为子程序的一部分,因此必须使用斜杠。
所以我的问题是:如果您的数据库是Oracle,那么编写SQL脚本的正确方法是什么?既然您知道您的数据库是Oracle,那么您应该始终使用/?吗?
这是一个优先选择的问题,但是我更喜欢看到始终使用斜杠的脚本-这样,所有工作的“单元”(创建PL / SQL对象,运行PL / SQL匿名块和执行DML语句)都可以用眼睛更容易挑选出来。
另外,如果最终使用Ant之类的东西进行部署,它将简化目标的定义以具有一致的语句定界符。