我有一个非常简单的例子来说明两个数字的总和。
CREATE OR REPLACE FUNCTION add(a integer, b integer) RETURNS integer AS
$$
SELECT $1+$2;
$$ LANGUAGE 'sql';
我的问题是如何定义范围b
10:20
,其值将按1计算,直到达到范围(20)的结尾。
结果是这样的
res = a + b
res = a + 10
res = a + 11
res = a + 12
res = a + 13
当我检索函数add with:
时SELECT add(1);
应该有结果:11,12,13,...,21。
之前我没有使用像FOR EACH
这样的循环(特别是在LANGUAGE sql
中)。
在plpgsql
中编写这些函数是否更好?
答案 0 :(得分:0)
答案 1 :(得分:0)
select add(1, b)
from generate_series(10, 20) b
答案 2 :(得分:0)
之前我没有像FOR EACH那样使用循环(特别是在LANGUAGE sql中)。
SQL中没有循环。 (唯一的例外是RECURSIVE CTEs。)LANGUAGE sql
(没有引号!)的函数,仅由SQL语句组成。如果您需要像循环这样的过程元素,则需要切换到PL/pgSQL的looping is easy enough(或任何其他过程语言)。
当然,您提供的简单示例最好用generate_series()解决,正如其他答案已经指出的那样。
请注意:最好在generate_series()
列表中使用FROM
。允许在SELECT
列表中使用它,但不赞成,因为非标准。在将来的版本中,SRF(设置返回函数)可能仅限于FROM
列表。