我必须在PLPGSQL中编写一个函数,但是函数主体用美元引号引起了问题。使用第一个教程:
CREATE FUNCTION inc(val integer)
RETURNS integer AS
$BODY$
BEGIN
RETURN val + 1;
END;
$BODY$
LANGUAGE PLPGSQL;
我得到一个错误:
$或附近的未报价美元报价字符串
在Google上搜索时,我刚刚发现这是JDBC驱动程序问题,但我无法更新它。
因此,我尝试将DELIMITER
更改为删除$$
:
DELIMITER ++;
CREATE FUNCTION inc(val integer)
RETURNS integer AS
++BODY++
BEGIN
RETURN val + 1;
END;
++BODY++
LANGUAGE PLPGSQL;
DELIMITER ;
该命令没有返回任何错误,但是当我尝试调用该函数时该函数不存在:
select inc(4);
我想念什么?
答案 0 :(得分:2)
潜在的问题是JDBC无法处理美元报价。
我认为这是fixed with JDBC version 9.4.1208 (2016-02-16)。
请参阅:
您可以通过在简单情况下使用普通引号来避免此问题:
CREATE FUNCTION inc(val integer)
RETURNS integer AS
'
BEGIN
RETURN val + 1;
END
' LANGUAGE plpgsql;
请参阅: