我正在运行带有变更集定义和匿名 plpgsql 块的 liquibase 变更日志,如下所述,在执行时我得到 sql 语法异常。我无法找到用于此的正确语法。
数据库更改日志:
<changeSet author="wamk" id="20210909102601">
<preConditions onFail="MARK_RAN">
<dbms type="postgresql" />
</preConditions>
<sqlFile path="027-rename-psps.sql" relativeToChangelogFile="true" endDelimiter="/" dbms="PostgreSQL" encoding="utf8" splitStatements="true"/>
</changeSet>
</databaseChangeLog>
'027-rename-psps.sql' 文件内容:
declare
cur_rename cursor (modulekeyold varchar) for
select * from payment_module_config where module_key = modulekeyold;
counter integer = 0;
commitnum integer = 100;
begin
FOR recordvar IN cur_rename('WirecardPaymentService_1.0') loop
raise notice 'Value: %', recordvar;
UPDATE payment_module_config SET module_key='GetNet V1' WHERE id = recordvar.id;
counter = counter + 1;
if(counter%commitnum=0) then
raise notice '>>> counter: %', counter;
commit;
end if;
end loop;
commit;
end;
/
例外 :
12:26:23.933 [main] ERROR liquibase.changelog.ChangeSet - Change Set db/changelog/027-rename-psps.sql::raw::includeAll failed. Error: Syntax error in SQL statement "DECLARE
CUR_RENAME[*] CURSOR (MODULEKEYOLD VARCHAR) FOR
SELECT * FROM PAYMENT_MODULE_CONFIG WHERE MODULE_KEY = MODULEKEYOLD;
COUNTER INTEGER = 0;
COMMITNUM INTEGER = 100;
BEGIN ...