我不确定CREATE FUNCTION
语句在PostgreSQL中是如何工作的。我想定义一个函数(只是为了娱乐),这样给定一个数字n,它打印从1到n的所有值,所以我写了这个:
CREATE FUNCTION asterisks(n int)
RETURNS CHAR AS
BEGIN
for i in range(1,n+1):
print("*"*i + "\n")
END
LANGUAGE python
字符串
我想要的n=3
的结果:
*
**
***
型
然而,我不确定这样调用Python是否可行。我在这里读到Postgres支持Python作为过程语言:
https://www.postgresql.org/docs/current/xplang.html
2条答案
按热度按时间92vpleto1#
Postgres 14或更高版本
最简单的方法是使用新的标准SQL语法:
字符串
或者更好(和所有标准SQL):
型
“更好”是因为它更容易理解,坚持标准SQL(更可移植)。两者都有争议。它适当地设置了
IMMUTABLE STRICT PARALLEL SAFE
,否则默认为VOLATILE CALLED ON NULL INPUT PARALLEL UNSAFE
。无争议。电话:
型
或者,更明确地说,符合标准:
型
参见:
generate_series()
Postgres 13(或任何版本):
SQL函数:
型
带循环的PL/pgSQL函数(循环通常更昂贵):
型
参见:
当然,对于简单的例子,我只运行普通语句而不是创建函数:
型
ig9co6j12#
您可以使用PL/pgSQL或SQL语言创建函数。
例如,创建
test
表,如下所示:字符串
然后,插入
num
为2
的行,如下所示:型
现在,您可以创建
my_func()
PL/pgSQL函数,该函数将value
添加到num
并将value
返回给调用者,如下所示:型
或者,您可以创建
my_func()
SQL函数,将value
添加到num
并将value
返回给调用者,如下所示:型
然后,您可以使用SELECT statement调用
my_func(3)
,然后返回5
,并将3
添加到num
,如下所示:型