mysql存储过程查找替换_【mysql】存储过程,查询/替换指定数据库、具体编码类型含有某字符串的所有表名和列名...

--1.将mysql分隔符从;设置为&

DELIMITER &

--2.如果存在存储过程getCount则删除

DROP PROCEDURE IF EXISTS `getCount` &

--3.定义存储过程,获取特定表列关键词的数量--(传入参数table_name字符串类型,为表名;传入参数column_name字符串类型,为列名;传入参数key_name字符串类型,为关键字;传出参数count_date整数类型,为数量)

CREATE DEFINER=`root`@`localhost` PROCEDURE getCount(IN table_name CHAR(200), IN column_name CHAR(200), IN key_name CHAR(20), OUT count_date INT)BEGIN

--4.声明变量

DECLARE $sqltext VARCHAR(1000);--5.动态sql,把sql返回值放到@count_date中

SET $sqltext = CONCAT('SELECT COUNT(*) into @count_date FROM', table_name, 'where', table_name, '.', column_name, 'LIKE \'%', key_name,'%\';');SET @sqlcounts :=$sqltext;--6.预编释,stmt预编释变量的名称

PREPARE stmt FROM @sqlcounts;--7.执行SQL语句

EXECUTEstmt;--8.释放资源

DEALLOCATE PREPAREstmt;--9.获取动态SQL语句返回值

SET count_date = @count_date;END

--10.定义存储过程结束

&

--11.如果存在存储过程getTableColumnNames则删除

DROP PROCEDURE IF EXISTS `getTableColumnNames` &

--12.定义存储过程,获取指定数据库关键词的表列名--(传入参数database_n字符串类型,数据库名;传入参数collation_n字符串类型,具体编码类型;传入参数key_name字符串类型,为关键字;传出参数tableColumnNames字符串类型,表列名)

CREATE DEFINER=`root`@`localhost` PROCEDURE getTableColumnNames(IN database_n CHAR(20), IN collation_n CHAR(32), IN key_name CHAR(20), OUT tableColumnNames TEXT)BEGIN

--13.声明变量。database_name查询出来的数据库,table_name查询出来的表名,column_name查询出来的列名,collation_name查询出来的具体编码类型

DECLARE database_name, table_name, column_name, collation_name CHAR(200);DECLARE tableColumnStr TEXT DEFAULT '';DECLARE resoult_count INT DEFAULT 0;--14.定义游标结束标识,默认为0

DECLARE stopflag INT DEFAULT 0;--15.定义游标,其实就是临时存储sql返回的集合

DECLARE sql_resoult CURSOR FOR SELECT t.TABLE_SCHEMA, t.TABLE_NAME, t.COLUMN_NAME, t.COLLATION_NAME FROMinformation_schema.COLUMNS t;--16.游标结束就设置为1

DECLARE CONTINUE HANDLER FOR NOT FOUND SET stopflag=1;--17.打开游标

OPENsql_resoult;--18.读取游标中数据,存储到指定变量

FETCH sql_resoult INTOdatabase_name, table_name, column_name, collation_name;--19.没有结束继续往下走

WHILE (stopflag=0) DOBEGIN

--20.判断数据库是否为输入的数据库名称,和,指定具体编码类型,和,不含.

IF (database_name=database_n AND collation_name=collation_n AND LOCATE('.', column_name)=0) THEN

--21.调用存储过程,获取特定表列关键词的数量

CALL getCount(table_name, column_name, key_name, resoult_count);--22.如果数量不等于0,那么记录表列名

IF (resoult_count <> 0) THEN

--23.拼接字符串,不可直接用传出变量设值

IF (tableColumnStr IS NULL OR tableColumnStr='') THEN

SET tableColumnStr=CONCAT(table_name, ',', column_name);ELSE

SET tableColumnStr=CONCAT(tableColumnStr, ';', table_name, ',', column_name);END IF;END IF;END IF;--24.读取游标中数据,存储到指定变量。(和18一样)

FETCH sql_resoult INTOdatabase_name, table_name, column_name, collation_name;END;END WHILE;--25.关闭游标

CLOSEsql_resoult;--26.把数据放到传出参数

SET tableColumnNames=tableColumnStr;END

--27.定义存储过程结束

&

--28.将mysql分隔符从&设置为;

DELIMITER ;--29.设置变量

SET @tableColumnNames='';SET @database='my_test';SET @collation_name='utf8_general_ci';SET @key='张三';--30.调用存储过程

CALL getTableColumnNames(@database, @collation_name, @key, @tableColumnNames);--31.打印

SELECT @tableColumnNames;--32.如果存在存储过程则删除

DROP PROCEDURE IF EXISTS`getCount`;DROP PROCEDURE IF EXISTS `getTableColumnNames`;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值