mysql存储过程游标循环装载字符串SQL语句示例

之前一直在写T-SQL,没有写过mysql 的存储过程,今天用SQLYog写mysql的存储过程,感觉好不习惯...

没有过多研究 

貌似变量声明前  不能执行select 之类的操作

写的一个示例,循环给表中某列增加一个默认值

自定义错误参照 这个  

存储过程传参

Loop循环

游标存储

仅此标记..

后面有机会再研究吧....

DROP PROCEDURE IF EXISTS temp;

DELIMITER //
CREATE PROCEDURE temp(
IN xx INTEGER)
BEGIN     
    DECLARE done INT DEFAULT FALSE;
    DECLARE tableName VARCHAR(50);
    DECLARE duplicate_key INT DEFAULT 0;
    DECLARE t_index CURSOR FOR (SELECT table_name FROM `information_schema`.`tables` 
    WHERE table_schema='superpark');
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    SELECT xx;
    OPEN t_index;
    myLoop:LOOP
    FETCH t_index INTO tableName;
    IF done  THEN 
        LEAVE myLoop;
    END IF;    
    BEGIN
        DECLARE EXIT HANDLER FOR 1054 SET duplicate_key=1; -- 这里的错误码根据具体错误码进行捕捉
        SET @Sql = CONCAT("ALTER TABLE ",tableName," ALTER COLUMN is_deleted SET  DEFAULT 0;");
    PREPARE stmt FROM @Sql;
    -- execute stmt;
    END;
    IF duplicate_key=1 THEN
    SELECT  CONCAT(tableName,'不存在列');
    -- continue
    END IF;
    END LOOP myLoop;
    CLOSE t_index; 
    
END
//
DELIMITER ;

CALL temp(254)

 不存在列  1054

mysql存储过程游标循环装载字符串SQL语句示例