mysql 動態生成sql語句執行方法,表格重新產生排序
begin
declare v_sql varchar(5000);
declare colname varchar(100);
DECLARE keycolname varchar(100);
DECLARE v_pksql varchar(1000);
DECLARE done INT DEFAULT 0;
DECLARE curl CURSOR FOR SELECT column_name,COLUMN_KEY FROM information_schema.COLUMNS WHERE table_name=p_tbname and TABLE_SCHEMA=p_dbname ;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
set v_sql= CONCAT('update ',p_tbname,' a,(select @x:=ifnull(@x,0)+10 as rownum ,');
set v_pksql='';
OPEN curl;
my_loop:LOOP
FETCH curl INTO colname,keycolname;
IF done=1 THEN
LEAVE my_loop;
END IF;
set v_sql=concat(v_sql,colname,',');
IF (keycolname='PRI') THEN
set v_pksql=CONCAT(v_pksql,'a.',colname,'=b.',colname,' and ');
end if;
END LOOP my_loop;
CLOSE curl;
set v_sql=left(v_sql,char_length(v_sql)-1); -- 去除最後逗號
set v_sql=CONCAT(v_sql,' from ',p_tbname,' where ',p_condition,' order by ',p_fieldname,') b set a.',p_fieldname,'=b.rownum where ');
set v_pksql=left(v_pksql,char_length(v_pksql)-1); -- 去除最後逗號
set v_sql=CONCAT(v_sql,v_pksql,' a.',p_fieldname,'<>b.rownum');
select v_sql;
set @v_sql=v_sql;
set @x=0;
prepare stmt from @v_sql; -- 預處理需要執行的動態SQL,其中stmt是一個變量
EXECUTE stmt; -- 執行SQL語句
deallocate prepare stmt; -- 釋放掉預處理段
-- select CONCAT(v_sql,v_pksql,' a.',fieldname,'<>b.rownum');
-- SELECT v_pksql;
end
declare v_sql varchar(5000);
declare colname varchar(100);
DECLARE keycolname varchar(100);
DECLARE v_pksql varchar(1000);
DECLARE done INT DEFAULT 0;
DECLARE curl CURSOR FOR SELECT column_name,COLUMN_KEY FROM information_schema.COLUMNS WHERE table_name=p_tbname and TABLE_SCHEMA=p_dbname ;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
set v_sql= CONCAT('update ',p_tbname,' a,(select @x:=ifnull(@x,0)+10 as rownum ,');
set v_pksql='';
OPEN curl;
my_loop:LOOP
FETCH curl INTO colname,keycolname;
IF done=1 THEN
LEAVE my_loop;
END IF;
set v_sql=concat(v_sql,colname,',');
IF (keycolname='PRI') THEN
set v_pksql=CONCAT(v_pksql,'a.',colname,'=b.',colname,' and ');
end if;
END LOOP my_loop;
CLOSE curl;
set v_sql=left(v_sql,char_length(v_sql)-1); -- 去除最後逗號
set v_sql=CONCAT(v_sql,' from ',p_tbname,' where ',p_condition,' order by ',p_fieldname,') b set a.',p_fieldname,'=b.rownum where ');
set v_pksql=left(v_pksql,char_length(v_pksql)-1); -- 去除最後逗號
set v_sql=CONCAT(v_sql,v_pksql,' a.',p_fieldname,'<>b.rownum');
select v_sql;
set @v_sql=v_sql;
set @x=0;
prepare stmt from @v_sql; -- 預處理需要執行的動態SQL,其中stmt是一個變量
EXECUTE stmt; -- 執行SQL語句
deallocate prepare stmt; -- 釋放掉預處理段
-- select CONCAT(v_sql,v_pksql,' a.',fieldname,'<>b.rownum');
-- SELECT v_pksql;
end
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.