美元引号在JDBC中失败

时间:2018-06-20 08:07:38

标签: postgresql jdbc plpgsql quotes

我必须在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);

enter image description here

我想念什么?

1 个答案:

答案 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;

请参阅: