Jump to content

[Resolvido] Procedimento (Join de 2 tabelas e transferir dados )


Helio13
 Share

Recommended Posts

Boa tarde!

Estou com um problema, e queria saber se alguém me poderia ajudar..!?

Queria fazer um procedimento em que faço o Join de duas tabelas (uma temporária e outra definitiva) e compare o mesmo atributo das duas tabelas.

Se os dados do atributo comparado como Join for igual não mantêm o esse registo na tabela temporária, senão for igual copia esse registo para a tabela definitiva...

Estou a tentar com este procedimento, mas não estou a conseguir

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `Join2`()
BEGIN

-- Definição de variáveis utilizadas no Procedimento
Declare CODIGO_INVENTARIO varchar(255);
Declare sitio, TIPO_ACHADO, CATEGORIA_ACH, MATERIA_PRIMA_ACH, NIVEL_ARTIFICIAL, CAMADA, QUADRADO, ORIENTACAO, INCLINACAO, DEPOSITO varchar(45);
Declare CONSOLIDACAO, RESTAURO, MOLDAGEM_REPLICA, ANALISE varchar(45);
Declare DESCRICAO, OBSERVACOES varchar(255);
Declare ANO, XN, YN, ZN,C_cm,L_cm,E_cm,A_cm,D_cm,CAIXA,CONTENTOR,PRATELEIRA int(11);
Declare s1 int default 0;

-- Definição do cursor
Declare c1 cursor for(
Select sip2.temp_teste.sitio
from sip2.temp_teste
inner join sip2.teste
on sip2.temp_teste.sitio = sip2.teste.sitio);

-- Definição da variável de controle de looping do cursor
Declare continue HANDLER for not found
SET s1 = 1;

-- Abre o cursor
OPEN c1;

Repeat

Fetch c1 into sitio;
if s1 = 0 then
INSERT INTO sip2.teste (CODIGO_INVENTARIO, sitio,TIPO_ACHADO,CATEGORIA_ACH,MATERIA_PRIMA_ACH,DESCRICAO,ANO,NIVEL_ARTIFICIAL,CAMADA,QUADRADO,XN,YN,ZN,ORIENTACAO,INCLINACAO,DEPOSITO,C_cm,L_cm,E_cm,A_cm,D_cm,CONSOLIDACAO,RESTAURO,MOLDAGEM_REPLICA,ANALISE,CAIXA,CONTENTOR,PRATELEIRA,OBSERVACOES)
SELECT * FROM sip2.temp_teste;
end if;

until s1 = 1 end repeat;

Close c1;

END

Alguém me pode dar uma ajuda??

Obrigado

Cumprimentos

Link to comment
Share on other sites

Sim ok, eu entendo...mas agora como consigo fazer que os registos que estão iguais nas duas tabelas fiquem na tabela temporária e os outros que não existem na tabela definitiva os passe da tabela temporária para a definitiva??

Link to comment
Share on other sites

Vou tentar explicar melhor. Eu estou a transferir dados do access para o mysql

Mas antes de inserir esses dados da tabela definitiva, mando os dados primeiro para uma tabela temporária...

O que quero depois fazer é:

Comparar a tabela temporária com a tabela definitiva

Mas quero comparar um atributo que é a chave primária...caso já existas dados na tabela definitiva com a mesma chave primária que existe no tabela temporária, não passa esse registo para a tabela definitiva, caso não exista transfere esse registo

Concluindo, transferido da tabela temporária para a tabela definitiva os registos que não tenham chaves primárias iguais nas duas tabelas...

Fiz me entender?

Por isso é que queria fazer com um procedimento...mas tinha que usar cursores e o join das tabelas

Em que ia percorrendo as linhas das tabelas e comparando a chave primária...se houver igual não nada, senão houver passa o registo...

Link to comment
Share on other sites

Sim, isso esta tudo ok com a transferencia dos dados do access para o mysql, estou a fazer uma conexão ODBC e esta ok.

Vou tentar dar um exemplo

Tenho esta tabela definitiva:

http://www.picture2life.com/Pictures/Open/16960740

E tenho esta temporária:

http://www.picture2life.com/Pictures/Open/16960726

Quero entao comprar entao as duas tabelas e ver se há alguma codigo de inventário igual entre as duas tabelas, senão houver passo os dados, caso haja nao passo o registo da tabela temporária para a definitiva...

Neste caso ia passar todos pois não ha nenhum codigo de inventario igual na tabela definitiva...

Link to comment
Share on other sites

como pensava ... estas a complicar o que é simples ...

fazes assim :

1º fazes um pedido à base de dados de origem por todos os registos da tabela que pretendes

2º para cada registo lida do tabela origem

3º guardas o valor do campo identificador

4º fazes um pedido na tabela destino por um registo com o campo identificador igual ao guardado

5º se o pedido devolveu uma lista vazia

6º insere o registo da tabela origem na tabela destino

podes fazer isto em código da tua aplicação muito facilmente sem complicares ...

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Sim, percebi o que queres dizer...

Mas quero fazer com um procedimento para que seja isto feito na parte do servidor e não na minha aplicação...seja tudo feito já no servidor e só tenho que invocar o procedimento na minha aplicação...

Fiz me entender?

Link to comment
Share on other sites

Através de uma conexão ODBC faço o exporte dos dados das tabelas do access para as tabelas do mysql

com a tua aplicação ... logo não é tudo executado pelo servidor

Mas quero fazer com um procedimento para que seja isto feito na parte do servidor e não na minha aplicação...seja tudo feito já no servidor e só tenho que invocar o procedimento na minha aplicação...

na minha opinião estás a complicar o que é simples ...

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Se vou por o access a fazer esse trabalho ele vai bloquear, mais ainda do que bloquei...pois estou a fazer tratamento de muitos dados.

Logo queria que essa parte fosse feita no servidor, visto que as duas tabelas a serem tratadas estão no servidor...

Consegues me ajudar no execução do procedimento?

O que acho que estou a fazer mal é a parte do cursor ou assim...mas não sei bem...

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.