加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql – 错误:未终止的带引号的字符串在或接近

发布时间:2020-12-13 16:44:26 所属栏目:百科 来源:网络整理
导读:当使用ANT执行下面显示的触发代码时,我得到错误 org.postgresql.util.PSQLException: ERROR: unterminated quoted string at or near "' DECLARE timeout integer"Position: 57 我可以成功地执行下面的代码通过PGADmin(由postgres提供)和命令行实用程序“ps
当使用ANT执行下面显示的触发代码时,我得到错误
org.postgresql.util.PSQLException: ERROR: unterminated quoted string at or near "' DECLARE timeout integer"
Position: 57

我可以成功地执行下面的代码通过PGADmin(由postgres提供)和命令行实用程序“psql”,并添加了触发器功能,但是通过ANT执行时,它每次失败

BEGIN TRANSACTION;

CREATE OR REPLACE FUNCTION sweeper() RETURNS trigger as '
    DECLARE
    timeout integer;
    BEGIN
    timeout = 30 * 24 * 60 * 60 ;
        DELETE FROM diagnosticdata WHERE current_timestamp - teststarttime  > (timeout * ''1 sec''::interval);
        return NEW;
    END;
' LANGUAGE 'plpgsql';

-- Trigger: sweep on diagnosticdata

CREATE TRIGGER sweep
  AFTER INSERT
  ON diagnosticdata
  FOR EACH ROW
  EXECUTE PROCEDURE sweeper();

END;
我有与Liquibase使用的JDBC驱动程序相同的问题。

看起来驱动程序以分号结尾的每行都会以单独的SQL命令运行。这就是为什么下面的代码将由JDBC驱动程序按以下顺序执行:

> CREATE OR REPLACE FUNCTION test(text)返回无效为’DECLARE tmp text
> BEGIN tmp:=“test”
> END;
>’LANGUAGE plpgsql

当然,这是无效的SQL并导致以下错误:

unterminated dollar-quoted string at or near ' DECLARE tmp text

要纠正这一点,您需要在每行结束后使用反斜杠分号:

CREATE OR REPLACE FUNCTION test(text) 
RETURNS void AS ' DECLARE tmp text; 
BEGIN 
tmp := "test"; 
END;' LANGUAGE plpgsql;

或者,您可以将整个定义放在一行中。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读