【问题标题】:Dollar-quotes failing with JDBC美元报价因 JDBC 失败
【发布时间】:2018-11-29 07:09:25
【问题描述】:

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

我错过了什么?

【问题讨论】:

  • 您的 SQL 客户端似乎无法处理美元报价。您使用的是哪个 SQL 客户端? (并且“美元引号”不是分隔符,它们是writing a string constant 的替代方式)
  • JDBC 是从哪里来的?
  • 我正在使用 HeidiSQL
  • 这肯定是您的客户没有处理$ 标志的问题。你的函数看起来不错。
  • 用 pgAdmin 试过了,效果很好。

标签: postgresql jdbc plpgsql quotes


【解决方案1】:

根本问题是 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;

见:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-10
    • 2019-08-30
    • 2019-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-29
    相关资源
    最近更新 更多