首页 > 解决方案 > 如何在 liquibase 中声明和运行匿名 plpgsql 块

问题描述

我正在运行带有变更集定义和匿名 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 ...

标签: plpgsqlliquibase

解决方案


推荐阅读