使用 JDBC 时美元报价失败

问题描述 投票:0回答:1

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

enter image description here

我错过了什么?

postgresql jdbc plpgsql quotes
1个回答
2
投票

根本问题是 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';
© www.soinside.com 2019 - 2024. All rights reserved.