You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Liquibase执行MariaDB含DELIMITER分隔符的SQL脚本失败问题求助

问题原因分析

核心问题出在Liquibase的splitStatements配置上,具体原因如下:

  • 你设置了splitStatements: true,该参数开启后Liquibase会默认以分号;作为分隔符拆分SQL文件中的所有语句,逐句提交给数据库,且不会识别SQL文件内的DELIMITER指令。你的循环逻辑属于复合语句,内部的UPDATE、END FOR等语句末尾都带分号,会被Liquibase拆成多个不完整的语法片段单独执行,自然会报错。
  • 你直接在MariaDB客户端执行SQL时,客户端可以正常识别DELIMITER //指令,会把整个循环块作为单条完整语句提交,所以可以运行成功。
  • 次要问题:你提供的YAML配置缩进存在错误,sqlFile下的encoding、path等参数缩进不规范,可能导致Liquibase无法正确识别配置项。
修复方案
  • 将对应sqlFile配置中的splitStatements改为false,让Liquibase将整个SQL文件作为单个语句块提交,不会破坏循环结构的完整性。
  • 如果你的SQL文件中除了循环逻辑还有其他独立的普通SQL语句,可以把循环逻辑单独拆分到一个SQL文件中,仅为该文件配置splitStatements: false,其他普通SQL文件保留原有配置即可。
  • 修正YAML配置的缩进,保证sqlFile下的所有子参数缩进一致,示例如下:
id: 3.36.0
comment: user deletion changes
author: testuser
changes:
  - sqlFile:
      encoding: utf8
      path: /db-scripts-${database}/test.sql
      relativeToChangelogFile: true
      splitStatements: false

内容的提问来源于stack exchange,提问作者nee nee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 18:54:04