createProcedure中的Liquibase标记错误 [英] Liquibase markup error in createProcedure
本文介绍了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屋!
查看全文