JDi*_*ani 3 postgresql liquibase
我正在使用 Liquibase 创建函数,但在尝试<在 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>
Run Code Online (Sandbox Code Playgroud)
错误:
Run Code Online (Sandbox Code Playgroud)The content of elements must consist of well-formed character data or markup.
在WHERE date >= $2 AND date < $3
小智 6
XML 不允许使用<或>在标签的值内,除非将该标签的内容包装到一个CDATA部分中:
<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>
Run Code Online (Sandbox Code Playgroud)
与 Liquibase 问题无关:包装简单 SQL 查询的函数最好定义为 SQL 函数,以避免 PL/pgSQL 开销:
<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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
758 次 |
| 最近记录: |