我必须在 PLPGSQL 中编写一个函数,但我对用美元引用引用的函数体有问题。使用第一个教程:
CREATE FUNCTION inc(val integer)
RETURNS integer AS
$BODY$
BEGIN
RETURN val + 1;
END;
$BODY$
LANGUAGE PLPGSQL;
我收到错误:
$$ 处或附近的未终止的美元引用字符串
在谷歌上搜索我刚刚发现这是一个 JDBC 驱动程序问题,但我无法更新它。 所以我尝试更改
DELIMITER
以删除 $$
:
DELIMITER ++;
CREATE FUNCTION inc(val integer)
RETURNS integer AS
++BODY++
BEGIN
RETURN val + 1;
END;
++BODY++
LANGUAGE PLPGSQL;
DELIMITER ;
该命令不会返回任何错误,但当我尝试调用它时,函数不存在:
select inc(4);
我错过了什么?
根本问题是 JDBC 无法处理美元引号。
我认为这已经通过 JDBC 版本 9.4.1208 (2016-02-16) 修复了。
参见:
您可以通过在简单情况下使用纯引号来避免问题:
CREATE FUNCTION inc(val integer)
RETURNS integer
LANGUAGE plpgsql AS
'
BEGIN
RETURN val + 1;
END
';
参见:
或者,当然,一个简单的(可内联的)SQL 函数,带有适合简单情况的标签:
CREATE FUNCTION inc(val integer)
RETURNS integer
LANGUAGE sql IMMUTABLE STRICT PARALLEL SAFE AS
'SELECT val + 1';