存储过程实现给所有的数据库运行一条操作语句,自动根据tc_截取,在表前面加上数据库名

来源:互联网 发布:mac 没内置扬声器选项 编辑:程序博客网 时间:2024/05/29 17:55
参数:sqlStatement varchar(250)

BEGIN
    DECLARE done INT DEFAULT 0;  #游标的标志位    
    DECLARE dbName varchar(250);
  DECLARE cmd varchar(250);

    DECLARE tb_name CURSOR FOR SELECT `SCHEMA_NAME` FROM `information_schema`.`SCHEMATA` ;
  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
      OPEN tb_name;
  REPEAT
    FETCH tb_name INTO dbName;
    IF NOT done THEN  
                set cmd=concat(left(sqlStatement,INSTR(sqlStatement,'tc_')-1),dbName,".",substring(sqlStatement,INSTR(sqlStatement,'tc_')));
       SET @E=cmd; 
       PREPARE stmt FROM @E; 
          EXECUTE stmt;  
          DEALLOCATE PREPARE stmt;
    END IF;
  UNTIL done END REPEAT;
  CLOSE tb_name;
END
1 0