)default charset=utf8;
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
DROP PROCEDURE if EXISTS p1 //
create procedure p1() -- 相当于excel sub
begin
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
declare tname2 varchar(255) character set utf8;
declare cname2 varchar(255) character set utf8;-- 游标用来存储字符串 所以要特别说明一下utf8
declare done int default 0;
-- 声明游标
declare mc cursor for SELECT c.TABLE_NAME , c.COLUMN_NAME FROM information_schema.`COLUMNS` c WHERE c.TABLE_SCHEMA = 'gjj'; -- mc 存储的是第一行
declare continue handler for not found set done = 1;
-- 打开游标
open mc;
xxx:loop-- 开始循环
-- 获取结果
fetch mc into tname2,cname2;-- 传递游标存储给变量
-- 这里是为了显示获取结果
-- select tname2,cname2; -- 结果1
set @one = CONCAT("SELECT COUNT(*) FROM ",tname2," t"," WHERE ");-- 花费了好多时间的地方:字段名不可以被单引号引着 而是键盘左上角第二行第一列 首个按键(英文状态下``) ``
set @two = concat("t.`",cname2,"`" ); -- 特别小的细节 加的是单引号 而是键盘左上角第二行第一列 首个按键(英文状态下``) ``
set @three = CONCAT(" like binary('小明') INTO @Num ;"); -- 找到小明 这列的统计数存储到了@num
set @STMT = CONCAT(@one,@two,@three);
-- SELECT @STMT;
PREPARE stmt FROM @STMT;
EXECUTE stmt;-- 执行预处理
DEALLOCATE PREPARE stmt;-- 释放预处理指针
-- SELECT @num; -- 结果2
IF (@num >0 ) THEN -- @num 这种变量是用户自定义变量,可以直接使用 @num = @num + 1;
INSERT INTO temp(tName,tZiDuan) VALUES (tname2,cname2);-- 给表格添加行 这里本质是存储返回结果 把符合条件的结果存储到这个temp表中
END if;
if done = 1 then
leave xxx;-- 退出循环
end if;
end loop;
SELECT * from temp;
-- 关闭游标
close mc;
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
end //
delimiter ;
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
call p1();-- 启动prcedure