Cri*_*ian 3 oracle plsql liquibase
我有以下代码在 SQL Developer 中运行没有问题,但是当我放入 liquibase 更改并运行它时,出现错误。
DECLARE
seqval NUMBER;
BEGIN
SELECT MAX(id) + 1 INTO seqval FROM T_SLS_ITEMS;
execute immediate('CREATE SEQUENCE SEQ_SLS_ITEMS MINVALUE '||seqval||'');
END;
Run Code Online (Sandbox Code Playgroud)
以及它的变更集:
<changeSet author="Cristian Marian (cmarian)" id="2019-05-24-171101 Fix Items sequence - creting">
<sql>
DECLARE
seqval NUMBER;
BEGIN
SELECT MAX(id) + 1 INTO seqval FROM T_SLS_ITEMS;
execute immediate('CREATE SEQUENCE SEQ_SLS_ITEMS MINVALUE '||seqval||'');
END;
</sql>
</changeSet>
Run Code Online (Sandbox Code Playgroud)
错误如下所示:
Reason: liquibase.exception.DatabaseException: ORA-06550: line 2, column 27:
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:
:= . ( @ % ; not null range default character
[Failed SQL: DECLARE
seqval NUMBER] (Liquibase Update failed.)
Run Code Online (Sandbox Code Playgroud)
Liquibase 将尝试<sql>通过默认的语句分隔符分割标签内的“脚本” ,即;. 对于 PL/SQL 块,这显然是错误的,因为需要将整个块视为单个语句。
为此,请splitStatements在<sql>标签中使用属性:
<sql splitStatements="false">
DECLARE
....
END;
</sql>
Run Code Online (Sandbox Code Playgroud)