-
Total de itens
5 -
Registro em
-
Última visita
Sobre aloysiocoutinho

aloysiocoutinho's Achievements
0
Reputação
-
aloysiocoutinho alterou sua foto pessoal
-
Problema resolvido.
-
Olá Denis, O problema do table_id foi resolvido. Obrigado pela dica de quando usar ou não o @. Ainda sou novo na exploração do MySql. Mas, não consegui montar o esquema da variável fora da procedure. Se uso simplesmente um declare fora do begin, recebo um erro. Não consigo encontrar uma explicação. Seria algum tipo de declaração diferente para isso?
-
O problema inicial foi resolvido. Estava montando a estrutura baseado em MSSQL. Trocando os "+" por "," na função de "CONCAT" a montagem passou a funcionar: Agora que preciso da ajuda dos experts no assunto: Quero montar uma procedure em loop que leia uma lista de "table_id" de uma outra tabela e me disponibilize esta contagem de todas as tabelas que existirem. Percebam que na quey acima eu fixei o valor desta coluna (139). Agora quero fazer esta mesma montagem para múltiplos valores. Estou tentando montar esta procedure da seguinte forma, mas ainda não obtive sucesso. DROP PROCEDURE IF EXISTS purgeTable; DELIMITER ;; CREATE PROCEDURE purgeTable(INOUT query VARCHAR(10000)) BEGIN DECLARE done BOOLEAN DEFAULT FALSE; DECLARE table_id INT; DECLARE r_table VARCHAR(100); DECLARE table_id_cursor CURSOR FOR SELECT table_id FROM s_qos_data; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; OPEN table_id_cursor; read_loop: LOOP FETCH table_id_cursor INTO table_id; IF done THEN LEAVE read_loop; END IF; SET @r_table = (SELECT r_table FROM S_QOS_DATA WHERE table_id = @table_id); SET @query = CONCAT('SELECT COUNT(*) AS ', @r_table, ' FROM ', @r_table, ' sampletime < "2016-09-30 00:00:00" '); PREPARE stmt FROM @query; EXECUTE stmt; DEALLOCATE PREPARE stmt; END LOOP read_loop; CLOSE table_id_cursor; END;; DELIMITER ; SET @query_list = ''; CALL purgeTable(@query_list); SELECT @query_list; Não sei porquê a variável "table_id", que recebe o valor do resultado do select do cursor, está vindo NULL. Alguém consegue me ajudar?
-
Olá pessoALL, Estou com dificuldades para montar uma query dinâmica. Será que vocês poderiam me ajudar? É o seguinte: Estou armazenando em uma variável o nome de uma tabela que consigo extrair de uma query: Agora quero criar uma outra variável que conterá a composição de uma nova query que irá utilizar esta variável no nome da tabela (vide segunda linha da montagem): E, por fim, gostaria de executar esta query que, teoricamente, está contida na variável @query (vide terceira linha da montagem, que por sinal está acusando um erro): Mas, não está funcionando conforme eu esperava. Se dou um "select @query" após a montagem, o seu conteúdo é o número zero "0". Futuramente esta composição irá virar uma procedure baseada em um cursor que irá extrair múltiplos "table_id", mas no momento estou tentando resolver esta montagem inicial primeiro. Alguém pode me ajudar
-
Olá pessoAll, Tenho a seguinte estrutura montada no SQL Server. O que está apresentado em vermelho eu já consegui adequar para o MySql, porém a montagem do pivot (em verde) e a criação da tabela final de saída (em azul) ainda não consegui converter para a linguagem do MySql. Será que alguém poderia me ajudar nesta conversão? De ante mão agradeço a colaboração de todos. 1 - Esta montagem resulta em 4 tabelas distintas denominadas Tabela_Semana1_CPU, Tabela_Semana2_CPU, Tabela_Semana3_CPU e Tabela_Semana4_CPU. if OBJECT_ID('Tabela_Semana1_CPU', 'U') is not null drop table Tabela_Semana1_CPU; select w.servidor, w.origem, cast(avg(w.cpu_avg) as decimal(10,2)) as Media into Tabela_Semana1_CPU from (Select source as SERVIDOR, origin as origem, cast(sampletime as date) as sampletime, cast(avg(samplevalue) as decimal (10,2)) as cpu_avg from V_QOS_CPU_USAGE WITH (NOLOCK) where target = 'Total' and sampletime between cast(dateadd(day, -27, getdate()) as date) and cast(dateadd(day, -20, getdate()) as date) group by source, origin, cast(sampletime as date)) w group by w.servidor, w.origem if OBJECT_ID('Tabela_Semana2_CPU', 'U') is not null drop table Tabela_Semana2_CPU; select w.servidor, w.origem, cast(avg(w.cpu_avg) as decimal(10,2)) as Media into Tabela_Semana2_CPU from (Select source as SERVIDOR, origin as origem, cast(sampletime as date) as sampletime, cast(avg(samplevalue) as decimal (10,2)) as cpu_avg from V_QOS_CPU_USAGE WITH (NOLOCK) where target = 'Total' and sampletime between cast(dateadd(day, -20, getdate()) as date) and cast(dateadd(day, -13, getdate()) as date) group by source, origin, cast(sampletime as date)) w group by w.servidor, w.origem if OBJECT_ID('Tabela_Semana3_CPU', 'U') is not null drop table Tabela_Semana3_CPU; select w.servidor, w.origem, cast(avg(w.cpu_avg) as decimal(10,2)) as Media into Tabela_Semana3_CPU from (Select source as SERVIDOR, origin as origem, cast(sampletime as date) as sampletime, cast(avg(samplevalue) as decimal (10,2)) as cpu_avg from V_QOS_CPU_USAGE WITH (NOLOCK) where target = 'Total' and sampletime between cast(dateadd(day, -13, getdate()) as date) and cast(dateadd(day, -6, getdate()) as date) group by source, origin, cast(sampletime as date)) w group by w.servidor, w.origem if OBJECT_ID('Tabela_Semana4_CPU', 'U') is not null drop table Tabela_Semana4_CPU; select w.servidor, w.origem, cast(avg(w.cpu_avg) as decimal(10,2)) as Media into Tabela_Semana4_CPU from (Select source as SERVIDOR, origin as origem, cast(sampletime as date) as sampletime, cast(avg(samplevalue) as decimal (10,2)) as cpu_avg from V_QOS_CPU_USAGE WITH (NOLOCK) where target = 'Total' and sampletime between cast(dateadd(day, -6, getdate()) as date) and cast(dateadd(day, 1, getdate()) as date) group by source, origin, cast(sampletime as date)) w group by w.servidor, w.origem Estes são os resultados (este passo já criei no mey MySql o esquivalente): 2 - Em seguida faço um pivot desta tabela que resulta uma uma tabela única denominada TabelaFinal_Semanal_CPU: if OBJECT_ID('TabelaFinal_Semanal_CPU', 'U') is not null drop table TabelaFinal_Semanal_CPU; with TabUnica (Semanas, SERVIDOR, origem, cpu_avg) as ( SELECT '1', SERVIDOR, origem, media from Tabela_Semana1_CPU union all SELECT '2', SERVIDOR, origem, media from Tabela_Semana2_CPU union all SELECT '3', SERVIDOR, origem, media from Tabela_Semana3_CPU union all SELECT '4', SERVIDOR, origem, media from Tabela_Semana4_CPU ) SELECT SERVIDOR, origem, cast([1] as Numeric(10,2)) as 'Semana1', cast([2] as Numeric(10,2)) as 'Semana2', cast([3] as Numeric(10,2)) as 'Semana3', cast([4] as Numeric(10,2)) as 'Semana4' INTO TabelaFinal_Semanal_CPU from TabUnica pivot (Avg(CPU_Avg) for Semanas in ([1], [2], [3], [4])) as P where SERVIDOR not in ('sprod01') order by Servidor; alter table TabelaFinal_Semanal_CPU with NOCHECK add [Previsao_Semana5] as cast(((Semana4 / Semana3) * Semana4) as decimal(10,2)) alter table TabelaFinal_Semanal_CPU with NOCHECK add [Previsao_Semana6] as cast(((((Semana4 / Semana3) * Semana4) / Semana4) * (Semana4 / Semana3) * Semana4) as decimal(10,2)) alter table TabelaFinal_Semanal_CPU with NOCHECK add [Previsao_Semana7] as cast(((((((Semana4 / Semana3) * Semana4) / Semana4) * (Semana4 / Semana3) * Semana4)) / ((Semana4 / Semana3) * Semana4) * ((((Semana4 / Semana3) * Semana4) / Semana4) * (Semana4 / Semana3) * Semana4)) as decimal(10,2)) Estes são os resultados (observem que o alter foi criado para inclusão das três últimas colunas baseadas em alguns cálculos): 3 - E, por fim gero esta última tabela, que é a que realmente me interessa, denominada TabelaFinal_Data_CPU: if OBJECT_ID('TabelaFinal_Data_CPU', 'U') is not null drop table TabelaFinal_Data_CPU; select SERVIDOR, origem, Semana1, dateadd(day, -20, getdate()) as Data1, Semana2, dateadd(day, -13, getdate()) as Data2, Semana3, dateadd(day, -6, getdate()) as Data3, Semana4, dateadd(day, 0, getdate()) as Data4, Previsao_Semana5, dateadd(day, 7, getdate()) as Data5, Previsao_Semana6, dateadd(day, 14, getdate()) as Data6, Previsao_Semana7, dateadd(day, 21, getdate()) as Data7 INTO TabelaFinal_Data_CPU from TabelaFinal_Semanal_CPU Este é o resultado final (as duas últimas colunas ficaram ocultas devido ao tamanho):