sql - PL/SQL中IF block 的奇数编码风格

标签 sql oracle plsql

在我工作的地方,我看到很多以下类型的代码是用 PL/SQL 编写的,

IF a>b THEN
  NULL;
ELSE
  c:=a*b;
END IF;

我觉得这很奇怪,因为 C 等价物看起来像这样,
if (a>b)
{

}
else
{
  c=a*b;
}

以上类型的代码在一个 C 论坛中被认为是糟糕的风格,我知道当新手发布时。
由于 PL/SQL 不允许空块并且总是需要一个 NULL 语句,这种类型的编码风格是否带来了可读性的任何优势,还是只是一个偏好问题?。 FWIW,用上述风格编写 PL/SQL 的人肯定是一个经验丰富的编码员。
与以下相比有什么优势吗?
IF a<=b THEN
  c:=a*b;
END IF;

最佳答案

看来a <= b如果任何部分为空,则不会为真。这就是为什么这两种说法不同的原因。

在第一种情况下,c = a*b如果 a 将运行一片空白。在第二种情况下,它不会。除非您确定ab不为空,等效的语句将改为:

IF a<=b or (a is null) or (b is null) THEN
  c:=a*b;
END IF;

关于sql - PL/SQL中IF block 的奇数编码风格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7862014/

相关文章:

java - 准备好的语句返回部分记录,即 3,而同一查询的 sql 开发人员返回所有记录,即 5

sql - 将 PostgreSQL 的 PL/pgSQL 输出保存到 CSV 文件

mysql - 根据列值的变化向 MySQL 查询结果添加空白行

database - 使用 go 和 InstantClient 从存储过程访问 OUT 参数(t_cursor 类型)

java - 是否有支持 PL/SQL 和 Java API 的嵌入式数据库?

SQL:如何检查外键是否真的改变了

json - 在 Oracle 19c 中将大 json 返回到 clob 时出现 ORA-40478

mysql - 更新: You can't specify target table 'table' for update in FROM clause

c#-4.0 - 如何处理时区问题而不将日期时间存储为带有时区的时间戳

oracle - 这些 PL/SQL 变量初始化是否等效?