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

我使用schema.sql文件在我的Spring启动应用程序中创建/删除表,它工作正常.但是当我添加更改表的过程时:DELIMITER $$CREATE PROCEDURE Alter_Table()BEGINIF NOT EXISTS( SELECT NULLFROM INFORMATION_SCHEMA.COL...

我使用schema.sql文件在我的Spring启动应用程序中创建/删除表,它工作正常.

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

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异常.

但是,在MySQL工作台中执行此过程会成功完成.

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

谢谢.

解决方法:

这是我发现的解决方案,它运行得很好,但它不是理想的,因为你必须更改你的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文件中执行过程的问题

基础教程推荐