set p_ms:=CONCAT(“selectcount(*) into @p_cnt from “,d_tab_name); set @p_mysql=p_ms; —注意很重要,将连成成的字符串赋值给一个变量(可以之前没有定义,但要以@开头) prepare stmt from @p_mysql; —预处理需要执行的动态SQL,其中stmt是一个变量 EXECUTE stmt; —执行SQL语句 deallocateprepare stmt; —释放掉预处理段 if _err=0 then set d_cnt :=@p_cnt; SET p_count := p_count+d_cnt; endif; set p_index := p_index+1; endwhile; end;
createPROCEDURE pc_test(in p_intdex int,instrvarchar(100),OUT p_count int) BEGIN DECLARE d_i intdefault0; DECLARE d_cnt int ; DECLARE d_tab_name varchar(12); declare my_sqll varchar(500); declare my_sql varchar(500); declare _var,_err intdefault0; declare continue handlerfor sqlexception, sqlwarning, notfoundset _err=1; /*执行异常信息*/ SET p_count := 0; while d_i < p_num do SET d_tab_name := concat(p_strs, d_i); set my_sqll := concat(‘selectcount(*) into @cnt from ‘, d_tab_name); set my_sql:=concat(my_sqll,’ where shipment_isnot=20′); set @ms := my_sql; PREPARE s1 from @ms; /*执行动态的sql*/ EXECUTE s1; deallocateprepare s1; if _err=0 then SET d_cnt := @cnt; if d_cnt is not null then SET p_count := p_count+d_cnt; endif; SET d_i := d_i+1; else SET d_i := p_num+1; endif; endwhile; END