spring-boot 在啟動運行腳本中執行修改表結構,執行前校驗表結構是否符合,如果不符合就修改


spring-boot可以通過簡單的配置,就可以直接sql文件執行創建表。但是該文件默認以“;”作為結束,在修改表結構中,需要用到存儲過程。存儲過程中需要用到";"。就會出現執行錯誤。好坑!

解決方案:

增加更改spring-boot的sql執行的結束符號的配置,以后在sql文件的結束就是以“$$”

spring.datasource.separator=$$

 

sql文件,功能先驗證表是否存在某個字段,如果不存在則創建該字段。

/* 充電審計 - 主表增加字段 */
drop procedure if exists add_col_homework$$
create procedure add_col_homework() BEGIN

IF NOT EXISTS (SELECT column_name FROM information_schema.columns WHERE TABLE_NAME = 'ChargeOpAudition' AND column_name = 'remarks')

THEN

   ALTER TABLE `ChargeOpAudition` ADD COLUMN  `remarks`  varchar(100) CHARACTER   SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ;

END IF;

    IF NOT EXISTS(SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE column_name='transactionidStart' AND table_name='ChargeOpAudition' AND table_schema='ztev_db') THEN
        ALTER TABLE `ChargeOpAudition` ADD COLUMN `transactionidStart` varchar(100) DEFAULT null COMMENT '開始交易號' ;
    END IF;
    
    IF NOT EXISTS(SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE column_name='state' AND table_name='ChargeOpAudition' AND table_schema='ztev_db') THEN
        ALTER TABLE `ChargeOpAudition` ADD COLUMN `state` int(2) DEFAULT '1' COMMENT '1:未審查,2:已審查' ;
    END IF;
    IF NOT EXISTS(SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE column_name='transactionidEnd' AND table_name='ChargeOpAudition' AND table_schema='ztev_db') THEN
        ALTER TABLE `ChargeOpAudition` ADD COLUMN `transactionidEnd` varchar(100) DEFAULT null COMMENT '結束交易號' ;
    END IF;
END$$

CALL add_col_homework()$$
drop procedure if exists add_col_homework$$

 

 

常寫博客,作為筆記


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM