【发布时间】:2011-11-19 17:04:10
【问题描述】:
PL/pgSQL 的文档说,变量的声明和赋值是用:= 完成的。
但是一个简单、更短且更现代 (见脚注)= 似乎可以按预期工作:
CREATE OR REPLACE FUNCTION foo() RETURNS int AS $$
DECLARE
i int;
BEGIN
i = 0;
WHILE NOT i = 25 LOOP
i = i + 1;
i = i * i;
END LOOP;
RETURN i;
END;
$$ LANGUAGE plpgsql;
> SELECT foo();
25
请注意,PL/pgSQL可以清楚地区分赋值和比较,如行中所示
WHILE NOT i = 25 LOOP
所以,问题是:
- 我没有在文档中找到提到和/或解释这一点的部分吗?
- 使用
=代替:=是否有任何已知后果?
编辑/脚注:
请像 A Brief, Incomplete, and Mostly Wrong History of Programming Languages 一样眨眼看“更现代”的部分:
1970 - Niklaus Wirth 创建了 Pascal,一种程序语言。批评家 立即谴责 Pascal,因为它使用 "x := x + y" 语法 而不是更熟悉的 C 类“x = x + y”。这种批评 尽管 C 尚未被发明,但仍会发生。
1972 - 丹尼斯·里奇发明了一种强大的枪,可以向前射击 并同时倒退。对死亡人数不满意 他发明了 C 和 Unix。
【问题讨论】:
-
它的工作原理确实很奇怪。您可能希望将其发布到 PG 邮件列表,以便 PG 开发人员可以就此发表意见。
-
使用
=而不是:=有什么优势吗? “更现代”并不是我的优势。 -
通常我会同意。但是最后一种计算机语言是什么时候发明的,a) 已被广泛使用,b) 使用 ':=' 进行赋值?我想那肯定已经过了几十年了。另一方面,我已将其设置为斜体以使其有点;-)
-
有趣的是,我只使用
=而不是:=没有遇到任何问题。最初是一个意外(来自其他语言的习惯),但我注意到 PostgreSQL 愿意创建这些函数并且它们运行良好,所以我坚持使用它。 -
@A.H.你应该看看 xquery - 它是在过去 5-10 年的某个时候发明的,正在积极开发中并使用“:=”
标签: postgresql plpgsql assignment-operator colon-equals