Java创建存储过程添加字段和索引

6 篇文章 0 订阅
// 创建字段添加存储过程,参数为:表名,字段名,创建语句。
session.execute("DROP PROCEDURE IF EXISTS proAddColumn;", Collections.emptyList());
session.execute("CREATE PROCEDURE proAddColumn(in tableName VARCHAR(50), in columnName VARCHAR(50), in addColumnSql VARCHAR(1000)) " +
                "BEGIN " +
                "  IF NOT EXISTS(SELECT 1 FROM information_schema.columns WHERE TABLE_NAME = tableName AND COLUMN_NAME = columnName) THEN " +
                "    SET @sqlStmt = addColumnSql; " +
                "    PREPARE stmt FROM @sqlStmt; " +
                "    EXECUTE stmt; " +
                "  END IF; " +
                "END " , Collections.emptyList());
// 在mysql客户端执行调用存储过程时,若addColumnSql参数包有单引号,则改为两个单引号——不是双引号,才能执行。sql中引号嵌套全部使用单引号。                
session.execute("CALL proAddColumn(?, ?, ?);", Arrays.asList("table1111", "column1111", "ALTER TABLE `table1111` " +
                "ADD COLUMN `column1111` DATE NOT NULL DEFAULT '1970-01-01' COMMENT '测试字段' AFTER `column0000`"));

SQL

// 创建存储过程
DROP PROCEDURE IF EXISTS proAddColumn;
DELIMITER $$
CREATE PROCEDURE proAddColumn(in tableName VARCHAR(50), in columnName VARCHAR(50), in addColumnSql VARCHAR(1000)) BEGIN
IF NOT EXISTS(SELECT 1 FROM information_schema.columns WHERE TABLE_NAME = tableName AND COLUMN_NAME = columnName) THEN
	SET @sqlStmt = addColumnSql;
	PREPARE stmt FROM @sqlStmt;
	EXECUTE	stmt;
END IF;
END $$

// 调用存储过程
CALL proAddColumn('table1111', 'column1111',
 'ALTER TABLE `table1111` ADD COLUMN `column1111` DATE NOT NULL DEFAULT ''1970-01-01'' COMMENT ''测试字段'' AFTER `column0000`');
 
 
-- 判断索引是否存在,不存在则创建索引
DROP PROCEDURE IF EXISTS proAddIndex;  
DELIMITER $$
CREATE PROCEDURE proAddIndex(in tableName VARCHAR(50), in indexName VARCHAR(50), in addIndexSql VARCHAR(1000)) BEGIN 
IF NOT EXISTS (SELECT 1 FROM information_schema.statistics WHERE table_name = tableName AND index_name = indexName) THEN
	SET @sqlStmt = addIndexSql;
	PREPARE stmt FROM @sqlStmt;
	EXECUTE	stmt;
END IF;
END $$
// 调用存储过程
CALL proAddIndex('table1111', 'index1111',
 'ALTER TABLE `table1111` ADD INDEX `index1111` (`column1111`, `column2222`)');
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值