【发布时间】:2010-11-07 23:22:28
【问题描述】:
本周我们在我的公司就应该如何编写 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,您是否应该始终使用 /?
【问题讨论】:
-
如果有人使用sqldeveloper进行数据库导出,则选择一个名为“terminator”的复选框,在选择时使用分号终止每个语句。默认选择此选项。取消选择以删除分号并避免重复执行语句
-
只是为了毫无意义地将这个旧线程打死,我会提到SQL语言没有分号。它只是 SQL*Plus 中的默认终止符(如果您愿意,可以将
sqlterminator设置为!),其他工具往往会遵循此约定。然而,PL/SQL 语言确实使用分号作为必需的语法元素。 -
@WilliamRobertson 您应该添加您的评论作为答案,因为答案中缺少此信息。