gpt4 book ai didi

java - 在 spring boot schema.sql 文件中执行过程的问题

转载 作者:可可西里 更新时间:2023-11-01 07:22:11 25 4
gpt4 key购买 nike

我在我的 Spring Boot 应用程序中使用 schema.sql 文件来CREATE/DROP 表,它工作正常。

但是当我添加了更改表的过程时:

DELIMITER $$
CREATE PROCEDURE Alter_Table()
BEGIN
IF NOT EXISTS( SELECT NULL
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'test_table'
AND table_schema = 'test'
AND column_name = 'cc_test_id') THEN

alter table test_table add cc_test_id VARCHAR(128) NOT NULL;

END IF;
END $$

call Alter_Table;

我收到了:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException exception.

但是,在 MySQL workbench 中执行此过程并获得成功结果。

所以,如果有人知道这个问题的原因是什么,请告诉我?

最佳答案

这是我发现效果很好的解决方案,但它并不理想,因为您必须更改 SQL 脚本。

在您的 application.properties 文件中更改 DataSource 分隔符属性:

spring.datasource.separator=^;

然后更新您的 schema.sql 文件,如下所示:

CREATE PROCEDURE Alter_Table()
BEGIN
IF NOT EXISTS( SELECT NULL
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'test_table'
AND table_schema = 'test'
AND column_name = 'cc_test_id') THEN

alter table test_table add cc_test_id VARCHAR(128) NOT NULL;

END IF;
END ^;

call Alter_Table ^;

DELIMITER 命令仅适用于 MySQL CLI 客户端和 Workbench,不适用于 Spring Boot 数据库初始化。一旦删除了 DELIMITER 命令,Spring Boot 仍然会抛出异常,因为它不会理解存储过程中的 ; 字符不是单独的语句,因此您必须将数据源分隔符属性更改为解决方法。

关于java - 在 spring boot schema.sql 文件中执行过程的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32903696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com