mysql存储过程使用总结

create PROCEDURE calculateusedsize(in dbname varchar(128))
  BEGIN   

    declare recordcount int(12);
    declare tn varchar(128);   
    declare size int(12);   
    declare usedsize int(12);
    DECLARE done INT DEFAULT 0;  
    DECLARE fetchtablecur CURSOR FOR SELECT qc.tablename , qc.size FROM system.columnsize qc;  
  
    declare continue handler for SQLSTATE '02000' set done = 1;
     

/*先删除再新建表,以后操作为insert*/
    set @dropquotatableSQL= CONCAT('DROP TABLE IF EXISTS ',dbname,'.usedtable');
    prepare s1 from @dropquotatableSQL;
    execute s1 ;
    deallocate prepare s1;
    set @dropquotatableSQL=null;   

    set @createquotatableSQL= CONCAT('CREATE TABLE ',dbname,'.usedtable (Id int(11) NOT NULL auto_increment,
         tablename varchar(128) NOT NULL ,
         usedsize int(32) NOT NULL,
         PRIMARY KEY  (Id)
         )');
    prepare s1 from @createquotatableSQL;
    execute s1 ;
    deallocate prepare s1;
    set @createquotatableSQL=null;
       
     



OPEN fetchtablecur;
 
REPEAT
    FETCH fetchtablecur INTO tn, size;
       
    IF NOT done THEN   

       #在动态sql中,将查询结果赋值给变量
       set @v_sqlcounts = concat('select count(1) into @recordcount from ',dbname,'.',tn); 
       set @countsSelectSQL := @v_sqlcounts;
       prepare s1 from @countsSelectSQL;        
       execute s1; 
       deallocate prepare s1;        
       set @v_sqlcounts =null;
       set @countsSelectSQL =null;
       set recordcount = @recordcount;
       select recordcount*size into usedsize;
     
       set @insertSQL= CONCAT('insert into ',dbname,'.usedtable(tablename,usedsize) values(\'',tn,'\',',usedsize,')');
       prepare s1 from @insertSQL;
       execute s1 ;
       deallocate prepare s1;
       set @insertSQL=null;      

    END IF;
UNTIL done END REPEAT;
 
  CLOSE fetchtablecur;


  END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值