plpgsql - 如何在 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 ...
解决方案
推荐阅读
- android-ndk - OpenCV Android Linking CXX shared FAILED
- javascript - 使用流导出类的正确方法?
- html - 用 CSS 提取照片
- mongodb - 存储/过滤超过 100 万条记录的动态表的最佳方式
- java - 跨类/包维护全局但可变的变量
- excel - excel计算特定时期每月的天数
- amazon-web-services - 管理员可以访问 AWS 控制台,但不能通过 CLI 访问
- r - 在所有其他列上使用条件进行变异以添加新列
- xml - XML 模式中的 derivedBy 属性创建基本类型列表
- c# - RestRequest 在本地工作,但不是来自天蓝色“请求被中止:无法创建 SSL/TLS 安全通道。”