mysql 存储过程

CREATE DEFINER=`root`@`%` PROCEDURE `test_while_0066`(IN in_count INT)
BEGIN
 
DECLARE COUNT INT DEFAULT 1;
 
 DECLARE COUNT2 INT DEFAULT 0;
 DECLARE countnum INT;
 
 DROP TABLE if  exists youhuitable1;
 create temporary table if not exists youhuitable1(id INT);
 
 DROP TABLE if  exists youhuitable2;
 create temporary table if not exists youhuitable2(beginid INT,endid INT);

 
while COUNT<=in_count DO
set COUNT2 =COUNT*1000;

set countnum= (SELECT count(*) from tj_appointment_chose_group_item where id=COUNT2);
   
IF countnum=0 THEN 
   INSERT into youhuitable1 SELECT COUNT;
END IF;
  set COUNT=COUNT+1;
end while;
 
SELECT * from youhuitable1;

begin
    -- 创建 用于接收游标值的变量
    declare idx,total int;
                declare beforeid,curid int;
    -- 注意 接收游标值为中文时 需要 给变量 指定 字符集为utf8
  
    -- 游标结束的标志
    declare done int default 0;
    -- 声明游标
    declare cur cursor for select id from youhuitable1;
    -- 指定游标循环结束时的返回值 
    declare continue handler for not found set done = 1;
    -- 打开游标
    open cur;
    
    -- 初始化 变量
    set total = 0;
                  set beforeid = -1;
    
    -- while 循环
    while done != 1 do
        fetch cur into idx;
          if done != 1 then
             set total = total + 1;                                                
                                                  
                                                        set curid=idx;
                                                        if(curid=beforeid+1) then
                                                        UPDATE youhuitable2 set endid= curid where endid = beforeid;
                                                        end if;
                                                        
                                                                if(curid>beforeid+1) then
                                                         INSERT into youhuitable2(beginid,endid) VALUES (idx,idx);
                                                        end if;
                                                        
                                                
                                                  set beforeid=idx;
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
          end if;    
    end while;
    -- 关闭游标
    close cur;
    -- 输出 累计的结果
    select total;
end;


SELECT * from youhuitable2;
 
END

CREATE DEFINER=`root`@`%` PROCEDURE `kill002`()
BEGIN

 DECLARE  pid int default 0;
         
                  declare done int default 0;
  -- 游标
  DECLARE cur CURSOR FOR select id FROM information_schema.`PROCESSLIST` where  command='Sleep';
    -- 指定游标循环结束时的返回值 
    declare continue handler for not found set done = 1;
  -- 打开游标
  OPEN cur;
         -- while 循环
    while done != 1 do
                  fetch cur into pid;
                   kill pid;
                
        
   END WHILE;

        
        
         -- 关闭游标
    close cur;
end

三  
 

CREATE DEFINER=`root`@`%` PROCEDURE `平移数据`()
BEGIN
-- 需要定义接收游标数据的变量 
  DECLARE  st VARCHAR(100);
	  DECLARE  dt VARCHAR(100);
		 DECLARE  spk VARCHAR(100);
		 DECLARE  dpk VARCHAR(100);
	 
		DECLARE  tableName VARCHAR(100);
		  declare done int default 0;
  -- 游标
  DECLARE cur CURSOR FOR select srcTable,destTable from `ry-vue`.trans_relation_table;
    -- 指定游标循环结束时的返回值 
    declare continue handler for not found set done = 1;
  -- 打开游标
  OPEN cur;
  
   -- while 循环
    while done != 1 do
          fetch cur into st,dt;
					start transaction;
					set @str0 ="CREATE TABLE if not EXISTS  `";

set @str1="`
                              (                  `id` int NOT NULL AUTO_INCREMENT,
                                                `dest_table_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '目标表表名',
                                                `dest_primary_key_column` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '目标表主键列',
                                                `dest_primary_key_value` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '目标表主键值',
                                                `src_table_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '源表表名',
                                                `src_primary_key_column` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '源表主键列',
                                                `src_primary_key_value` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '源表主键值',
                                                `create_user_id` int NULL DEFAULT NULL COMMENT '创建人id',
                                                `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
                                                `create_user_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人名称',
                                                `update_user_id` int NULL DEFAULT NULL COMMENT '修改人id',
                                                `update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改的时间',
                                                `update_user_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '修改人的名称',
                                                `is_delete` bit(1) NULL DEFAULT b'0' COMMENT '逻辑删除 0代表未删除1已删除',
                                                `table_relation_id` int NULL DEFAULT NULL COMMENT '表关系id',
                                                `module_id` int NULL DEFAULT NULL COMMENT '模块id',
                                                `plan_id` int NULL DEFAULT NULL COMMENT '方案id',
                                                `src_table_column_value` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '源表源列源值',
                                                PRIMARY KEY (`id`) USING BTREE,
                                                INDEX `IDX_SRC_TABLE_COLUMN_VALUE`(`src_table_column_value`) USING BTREE
                                        ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '目标表与源表主键值对应关系'                 ROW_FORMAT = DYNAMIC;";


	set tableName =CONCAT(st,'-',dt,'-keyvalue');
	
	set @str3= CONCAT(@str0,tableName,@str1);
						
	
 -- SELECT @str3;
	
	 prepare s1 from  @str3;
 execute s1;
 deallocate prepare s1;
commit;
 
 		start transaction;
 select scr_table_column,dest_table_column into spk, dpk   from `ry-vue`.trans_relation_external where scr_table_name = st and dest_table_name = dt and is_pk_relation=1;
 

set @likestr=  CONCAT('1-',st,'-',spk,'-',dt,'-',dpk,'%');

set @strinsert =
     CONCAT (  'INSERT into  `',tableName,"`(  `id` ,
  `dest_table_name` ,
  `dest_primary_key_column` ,
  `dest_primary_key_value` ,
  `src_table_name`,
  `src_primary_key_column`,
  `src_primary_key_value` ,
  `create_user_id` ,
  `create_time` ,
  `update_user_id` ,
  `update_time` ,
  `update_user_name`,
  `is_delete`  ,
  `table_relation_id`,
  `module_id`,
  `plan_id` ,
  `src_table_column_value` )  select `id` ,
  `dest_table_name` ,
  `dest_primary_key_column` ,
  `dest_primary_key_value` ,
  `src_table_name`,
  `src_primary_key_column`,
  `src_primary_key_value` ,
  `create_user_id` ,
  `create_time` ,
  `update_user_id` ,
  `update_time` ,
  `update_user_name`,
  `is_delete`  ,
  `table_relation_id`,
  `module_id`,
  `plan_id` ,
  `src_table_column_value` from  `ry-vue`.`trans_key_value_relation`  where src_table_column_value like '", @likestr,"'" );
	
	
-- SELECT @strinsert;

	 prepare sinsert from @strinsert;
 execute sinsert;
 deallocate prepare sinsert;

COMMIT;
	
    end while;
    -- 关闭游标
    close cur;
	
END

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值