Fórum Stored Procedure para separar tabela em duas #31299
16/10/2008
0
Alô!
Tenho um BD MySQL com tabelas mensais, uma para cada mês do ano, começando em 2005 e terminando em Ago/2008, num total de 44 tabelas.
Algumas dessas tabelas mensais tem mais de 65.000 registros. Como preciso exportá-las para o Excel, bato de frente com o problema do limite de linhas por planilha: 65.000.
Pensei, então, em separar cada tabela mensal em 2 tabelas: uma contendo o campo ´tipo_mov = P´ e outra com ´tipo_mov = I´.
Criei a Stored Procedure abaixo para fazer essa separação.
Como sou ´newbie´ no MYSQL o código não funcionou...
Alguém me disse que devo usar o tal de PREPARE para isso.
Alguma ajuda?
Grato
Renato
***************** código *********************
BEGIN
Declare mytable varchar(20);
Declare mytable_P varchar(20);
Declare mytable_I varchar(20);
DECLARE var_year integer DEFAULT 5;
DECLARE var_month integer DEFAULT 1;
END
WHILE var_year <= 8 DO ´ aqui já dá problema...
BEGIN
While var_month <= 12 DO
BEGIN
Set var_type = ´P´
Set mytable = table_amc_200 + CAST(var_year AS varchar(1)) +´_´ + concat(´0´,CAST(var_month
AS varchar(2))) ´ o resultado deveria ser ´table_amc_2005_01´ por examplo.
Set mytable_P = mytable + ´_´ + ´P´
CREATE TABLE mytable_P ´ ´mytable_P´ deveria ser substituída por ´table_amc_2005_01_P´
SELECT
mytable.cart_usu, ´ aqui ´mytable´ deveria ser substituída por ´table_amc_2005_01´
mytable.nome_usu,
mytable.data_realiz,
mytable.tipo_mov,
mytable.cod_proc_ins,
mytable.cod_prestador,
mytable.nome_prestador,
mytable.esp_prestador,
mytable.quant,
mytable.valor,
mytable.´mod´,
mytable.desc_mod,
mytable.nro_guia,
mytable.loc_atend,
mytable.desc_loc_atend,
mytable.´conv´,
mytable.desc_conv,
mytable.grau_depend,
mytable.data_nasc,
mytable.ano_comp,
mytable.mes_comp,
mytable.chave_unica,
mytable.ano_data_realiz,
mytable.mes_data_realiz
FROM mytable
WHERE mytable.tipo_mov = ´P´
Set mytable_I = mytable + ´_´ + ´I´
CREATE TABLE mytable_I ´ aqui ´mytable_I´ deveria ser substituída por ´table_amc_2005_01_I´
SELECT
mytable.cart_usu,
mytable.nome_usu,
mytable.data_realiz,
mytable.tipo_mov,
mytable.cod_proc_ins,
mytable.cod_prestador,
mytable.nome_prestador,
mytable.esp_prestador,
mytable.quant,
mytable.valor,
mytable.´mod´,
mytable.desc_mod,
mytabl.nro_guia,
mytable.loc_atend,
mytable.desc_loc_atend,
mytable.´conv´,
mytable.desc_conv,
mytable.grau_depend,
mytable.data_nasc,
mytable.ano_comp,
mytable.mes_comp,
mytable.chave_unica,
mytable.ano_data_realiz,
mytable.mes_data_realiz
FROM mytable
WHERE mytable.tipo_mov = ´I´
Set var_month= var_month + 1
END;
end while;
Set var_year = var_year + 1
END;
end while;
Tenho um BD MySQL com tabelas mensais, uma para cada mês do ano, começando em 2005 e terminando em Ago/2008, num total de 44 tabelas.
Algumas dessas tabelas mensais tem mais de 65.000 registros. Como preciso exportá-las para o Excel, bato de frente com o problema do limite de linhas por planilha: 65.000.
Pensei, então, em separar cada tabela mensal em 2 tabelas: uma contendo o campo ´tipo_mov = P´ e outra com ´tipo_mov = I´.
Criei a Stored Procedure abaixo para fazer essa separação.
Como sou ´newbie´ no MYSQL o código não funcionou...
Alguém me disse que devo usar o tal de PREPARE para isso.
Alguma ajuda?
Grato
Renato
***************** código *********************
BEGIN
Declare mytable varchar(20);
Declare mytable_P varchar(20);
Declare mytable_I varchar(20);
DECLARE var_year integer DEFAULT 5;
DECLARE var_month integer DEFAULT 1;
END
WHILE var_year <= 8 DO ´ aqui já dá problema...
BEGIN
While var_month <= 12 DO
BEGIN
Set var_type = ´P´
Set mytable = table_amc_200 + CAST(var_year AS varchar(1)) +´_´ + concat(´0´,CAST(var_month
AS varchar(2))) ´ o resultado deveria ser ´table_amc_2005_01´ por examplo.
Set mytable_P = mytable + ´_´ + ´P´
CREATE TABLE mytable_P ´ ´mytable_P´ deveria ser substituída por ´table_amc_2005_01_P´
SELECT
mytable.cart_usu, ´ aqui ´mytable´ deveria ser substituída por ´table_amc_2005_01´
mytable.nome_usu,
mytable.data_realiz,
mytable.tipo_mov,
mytable.cod_proc_ins,
mytable.cod_prestador,
mytable.nome_prestador,
mytable.esp_prestador,
mytable.quant,
mytable.valor,
mytable.´mod´,
mytable.desc_mod,
mytable.nro_guia,
mytable.loc_atend,
mytable.desc_loc_atend,
mytable.´conv´,
mytable.desc_conv,
mytable.grau_depend,
mytable.data_nasc,
mytable.ano_comp,
mytable.mes_comp,
mytable.chave_unica,
mytable.ano_data_realiz,
mytable.mes_data_realiz
FROM mytable
WHERE mytable.tipo_mov = ´P´
Set mytable_I = mytable + ´_´ + ´I´
CREATE TABLE mytable_I ´ aqui ´mytable_I´ deveria ser substituída por ´table_amc_2005_01_I´
SELECT
mytable.cart_usu,
mytable.nome_usu,
mytable.data_realiz,
mytable.tipo_mov,
mytable.cod_proc_ins,
mytable.cod_prestador,
mytable.nome_prestador,
mytable.esp_prestador,
mytable.quant,
mytable.valor,
mytable.´mod´,
mytable.desc_mod,
mytabl.nro_guia,
mytable.loc_atend,
mytable.desc_loc_atend,
mytable.´conv´,
mytable.desc_conv,
mytable.grau_depend,
mytable.data_nasc,
mytable.ano_comp,
mytable.mes_comp,
mytable.chave_unica,
mytable.ano_data_realiz,
mytable.mes_data_realiz
FROM mytable
WHERE mytable.tipo_mov = ´I´
Set var_month= var_month + 1
END;
end while;
Set var_year = var_year + 1
END;
end while;
Pozzo
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)