Criação de Cursores para atualizar tabela
24/08/2018
0
Olá. Gostaria de uma orientação quanto a um desafio no MySQL 8:
Tenho duas tabelas:
#1: usuarios (id_user, nome, nascimento, endereço, cidade, ...)
#2: utilizacao (id_medicamento, nome, nascimento, medicamento, data, ...)
A tabela #1 armazena todos os dados dos usuarios, cada um com um id.
A tabela #2 armazena todas as utilizações dos usuarios (e contém muito mais linhas), mas não tenho o id_user, para fazer um Join. Apenas o nome e data de nascimento que são campos também encontrados na tabela #1.
Preciso criar um Cursor que percorra linha a linha a tabela #2, procurando o id_user correspondente, comparando o nome e nascimento com a tabela#1, e atualizar esse id_user na tabela#2, em uma nova coluna.
Tenho duas tabelas:
#1: usuarios (id_user, nome, nascimento, endereço, cidade, ...)
#2: utilizacao (id_medicamento, nome, nascimento, medicamento, data, ...)
A tabela #1 armazena todos os dados dos usuarios, cada um com um id.
A tabela #2 armazena todas as utilizações dos usuarios (e contém muito mais linhas), mas não tenho o id_user, para fazer um Join. Apenas o nome e data de nascimento que são campos também encontrados na tabela #1.
Preciso criar um Cursor que percorra linha a linha a tabela #2, procurando o id_user correspondente, comparando o nome e nascimento com a tabela#1, e atualizar esse id_user na tabela#2, em uma nova coluna.
Juliano Nobrega
Curtir tópico
+ 0
Responder
Posts
26/09/2018
Ricardo Pestana
bom dia Juliano,
Se entendi bem o que vc quer fazer, acho que seria mais ou menos assim sua rotina com cursor
CREATE PROCEDURE `exemplo` ()
BEGIN
declare nome_aux varchar(45);
declare nascimento_aux date;
declare iduser_aux varchar(45);
declare done int default 0;
DECLARE curs CURSOR FOR (
SELECT id_user, nome, nascimento FROM devmedia.usuarios_ex
);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN curs;
REPEAT
FETCH curs INTO iduser_aux, nome_aux, nascimento_aux;
IF NOT done THEN
update utilizacao_ex set id_user = iduser_aux where
nome = nome_aux and nascimento = nascimento_aux;
commit;
END IF;
UNTIL done END REPEAT;
CLOSE curs;
END
Se entendi bem o que vc quer fazer, acho que seria mais ou menos assim sua rotina com cursor
CREATE PROCEDURE `exemplo` ()
BEGIN
declare nome_aux varchar(45);
declare nascimento_aux date;
declare iduser_aux varchar(45);
declare done int default 0;
DECLARE curs CURSOR FOR (
SELECT id_user, nome, nascimento FROM devmedia.usuarios_ex
);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN curs;
REPEAT
FETCH curs INTO iduser_aux, nome_aux, nascimento_aux;
IF NOT done THEN
update utilizacao_ex set id_user = iduser_aux where
nome = nome_aux and nascimento = nascimento_aux;
commit;
END IF;
UNTIL done END REPEAT;
CLOSE curs;
END
Responder
26/09/2018
Ricardo Pestana
Juliano,
Como vc perguntou sobre cursor montei a procedure conforme sua duvida. Mas o update abaixo vai dar o mesmo resultado...
update utilizacao_ex x inner join usuarios_ex a
set x.id_user = a.id_user where x.nome = a.nome and x.nascimento = a.nascimento;
Como vc perguntou sobre cursor montei a procedure conforme sua duvida. Mas o update abaixo vai dar o mesmo resultado...
update utilizacao_ex x inner join usuarios_ex a
set x.id_user = a.id_user where x.nome = a.nome and x.nascimento = a.nascimento;
Responder
Clique aqui para fazer login e interagir na Comunidade :)