如何测试参数在 plpgsql 函数体中是否为空?



我的函数代码如下:

CREATE OR REPLACE FUNCTION INC(init_val)
RETURNS INTEGER AS $INVAL$
DECLARE CUR_VAL INTEGER;
BEGIN
CUR_VAL := (SELECT MAX(val_num) FROM values);
CUR_VAL := CUR_VAL+init_val;
INSERT INTO values VALUES (CUR_VAL);
RETURN CUR_VAL;
end;
$INVAL$ LANGUAGE plpgsql

我正在尝试检查init_val是否为空。你是怎么做到的?

您的函数表现出多个问题。而且描述有矛盾。

这可能会完成您正在寻找的内容:

CREATE OR REPLACE FUNCTION f_values_inc(_init_val int)
RETURNS integer
LANGUAGE sql AS
$INVAL$
INSERT INTO values (val_num)
SELECT COALESCE(MAX(val_num), _init_val, 0) + 1
FROM   values
RETURNING val_num;
$INVAL$;

叫:

SELECT f_values_inc(7);

但这只是一个概念证明。我没有看到用例。如前所述,该函数无法处理表上的并发写入。

请考虑改用serialIDENTITY列,这两者都设计为在并发写入负载下不会中断。看:

  • 自动递增表列

旁白:避免使用values等 SQL 关键字作为标识符。虽然这在Postgres中基本上是允许的,但它在标准SQL中是保留的。仅使用合法的、小写的、不带引号的标识符,让您在 Postgres 的生活更轻松。看:

  • PostgreSQL 列名是否区分大小写?

最新更新