createProcedure中的Liquibase标记错误 [英] Liquibase markup error in createProcedure

查看:59
本文介绍了createProcedure中的Liquibase标记错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Liquibase创建函数,并在尝试在SQL中使用< 运算符时遇到错误.

I am using Liquibase to create functions and getting error when trying to use < operator in SQL.

SQL:

     <createProcedure>
        CREATE OR REPLACE FUNCTION function(dateFrom timestamp, dateTo timestamp ) 
        RETURNS TABLE
        LANGUAGE plpgsql
        AS $$
        BEGIN
        SELECT * FROM
        ORDER BY date DESC
        WHERE date >= $2 AND date <  $3
        RETURN QUERY;
        END;
        $$;
     </createProcedure>

错误:

The content of elements must consist of well-formed character data or markup.

WHERE date> = $ 2 AND date<$ 3

推荐答案

XML不允许在标记值内使用< > ,除非您将该标签的内容包装到 CDATA 部分:

XML does not allow to use < or > inside the value of a tag, unless you wrap the content of that tag into a CDATA section:

<createProcedure>
 <![CDATA[ 
    CREATE OR REPLACE FUNCTION function(dateFrom timestamp, dateTo timestamp ) 
    RETURNS TABLE
    LANGUAGE plpgsql
    AS $$
    BEGIN
    SELECT * FROM
    ORDER BY date DESC
    WHERE date >= $2 AND date <  $3
    RETURN QUERY;
    END;
    $$;
  ]]> 
</createProcedure>


与Liquibase问题无关:包装简单SQL查询的函数最好定义为SQL函数,以避免PL/pgSQL开销:


Unrelated to the Liquibase question: functions wrapping simple SQL queries are better defined as SQL functions to avoid the PL/pgSQL overhead:

<createProcedure>
 <![CDATA[ 
    CREATE OR REPLACE FUNCTION function(dateFrom timestamp, dateTo timestamp ) 
    RETURNS TABLE (...)
    LANGUAGE sql
    AS $$
      SELECT * 
      FROM ...
      WHERE date >= $2 
        AND date <  $3
      ORDER BY date DESC
    $$;
  ]]> 
</createProcedure>

这篇关于createProcedure中的Liquibase标记错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆