56,679
社区成员
发帖
与我相关
我的任务
分享
CREATE PROCEDURE Pro_Merage_Data
BEGIN
DECLARE v_DB1,v_TABLE1,v_DB2,v_TABLE2 VARCHAR(45);
DECLARE v_OFFSET INT;
DECLARE v_KEYS VARCHAR(80);
DECLARE v_sql VARCHAR(1000);
DECLARE cur_Param CURSOR FOR SELECT * FROM data_merage_param;
DECLARE n_flag INT;
OPEN cur_Param;
FETCH cur_Param INTO v_DB1,v_TABLE1,v_DB2,v_TABLE2,v_OFFSET,v_KEYS;
WHILE @@FECTH_STATUS = 0
BEGIN
v_sql = 'SELECT 1 FROM information_schema.TABLES where table_schema = '@+v_DB1' and table_name = '@+v_TABLE1'_Back';
EXECUTE v_sql INTO n_flag;
IF n_flag IS NOT NULL THEN
v_sql = 'TRUNCATE TABLE '@+v_TABLE1'_Back';
EXECUTE v_sql;
v_sql = 'INSERT INTO '@+v_TABLE1'_Back SELECT * FROM '@+v_DB1'.'@+v_TABLE1
' A LEFT JOIN '@+v_DB1'.'@+v_TABLE1' B USING('@+v_KEYS') WHERE b.'@+v_KEYS' IS NULL;';
EXECUTE v_sql;
COMMIT;
ELSE
v_sql = 'CREATE TABLE '@+v_TABLE1'_Back SELECT * FROM '@+v_DB1'.'@+v_TABLE1
' A LEFT JOIN '@+v_DB1'.'@+v_TABLE1' B USING('@+v_KEYS') WHERE b.'@+v_KEYS' IS NULL;';
EXECUTE v_sql;
COMMIT;
END IF;
v_sql = 'UPDATE '@+v_DB1'.'@+v_TABLE1' SET '@+v_KEYS' = '@+v_KEYS' + '@+V_OFFSET;
EXECUTE v_sql;
COMMIT;
v_sql = 'INSERT INTO '@+v_DB1'.'@+v_TABLE1' SELECT * FROM '@+v_DB1'.'@+v_TABLE1'_Back';
EXECUTE v_sql;
COMMIT;
END
CLOSE cur_Param;
DEALLOCATE cur_Param;
END