【问题标题】:Liquibase : unterminated dollar-quoted string at or near $BODY$Liquibase : $BODY$ 或附近的未终止的美元引号字符串
【发布时间】:2017-07-20 06:36:49
【问题描述】:

您好,我正在努力解决该主题的问题。我有以下变更集:

 <changeSet author="artur" id="storedProcedures-0003">

        <sqlFile dbms="postgresql"
                 encoding="utf8"
                 path="server/sql/storedProcedures/postgresql/procedure.sql"
                 relativeToChangelogFile="true"
                 splitStatements="false"
        />
    </changeSet>

我的程序是:

CREATE FUNCTION testProc(oRefCursor          OUT  REFCURSOR)

AS $BODY$
DECLARE
    minLevel        INTEGER;
    defDcId         DECIMAL(19);
BEGIN

END;
$BODY$ LANGUAGE plpgsql;

此过程与 pgAdmin 工具一起工作正常,但在 liquibase 中我总是得到错误。我试图找到并回答,但 thisthis 也不适合我。我在单独的文件中有这个过程,我使用splitStatements="false",但没有任何帮助。我总是收到这个错误。有谁知道这个问题的解决方法(这是 Liquibase 问题吗?)。我试图在一行中写这个,我试图使用斜线但没有成功。

【问题讨论】:

  • 哪个 Liquibase 版本?
  • @a_horse_with_no_name Liquibase 3.5.3

标签: postgresql liquibase


【解决方案1】:

liquibase 的一个非常好的解决方法是使用不同的分隔符。我个人的选择只是双分号。

CREATE FUNCTION exampleFunction()
AS
$BODY$
BEGIN
    SELECT 1;
END;
$BODY$ 
    LANGUAGE plpgsql;;
<changeSet id="1" author="author">
    <sqlFile path="example.sql" endDelimiter=";;"/>
</changeSet>

【讨论】:

  • 为我工作。有点傻 - 但它完成了工作。
【解决方案2】:

我发现了这种行为的原因。在我的项目中,硬编码了一些旧版本的 postgresql 驱动程序。我已经切换到最新的(42.1.3),现在一切都很好。我的意思是很好,但仍然在 Liquibase 我需要在我的问题中描述的单独文件中使用过程 sql 的解决方法

【讨论】:

    猜你喜欢
    • 2016-06-14
    • 2013-09-26
    • 1970-01-01
    • 2015-12-14
    • 2019-04-13
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    相关资源
    最近更新 更多