Đây là giải pháp mà tôi thấy rằng hoạt động đủ tốt, mặc dù nó không lý tưởng vì bạn phải thay đổi tập lệnh SQL của mình.
Trong application.properties
của bạn tệp thay đổi thuộc tính dấu phân tách DataSource:
spring.datasource.separator=^;
Sau đó cập nhật schema.sql
của bạn tệp trông như sau:
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 ^;
Lệnh DELIMITER chỉ hoạt động với máy khách MySQL CLI và Workbench và sẽ không hoạt động để khởi tạo cơ sở dữ liệu Spring Boot. Khi bạn đã xóa các lệnh DELIMITER, Spring Boot vẫn sẽ đưa ra một ngoại lệ vì nó sẽ không hiểu ;
các ký tự trong các thủ tục được lưu trữ không phải là các câu lệnh riêng biệt, vì vậy bạn phải thay đổi thuộc tính dấu phân tách nguồn dữ liệu như một giải pháp thay thế.