Re: [oracle_br] Utilização do Comando Merge

2008-08-29 Por tôpico francisco porfirio
Por exemplo:

Tenho tabela tb_origem e tb_destino

tb_origem possui
10 reg. que não tem na tb_destino
e possui 15 que possuim em ambos, porém dos 15, 10 foram modificados.

Desta forma ao executar o merge eu queria que ele fizess da seguinte forma:
20 merge
10 Inserts
10 Updates

Mas ele atualiza todos, com isso fica da seguinte forma:
25 Merge
10 inserts
15 Updates




-- 
Atenciosamente
Francisco Porfirio Ribeiro Neto


[As partes desta mensagem que não continham texto foram removidas]



Re: [oracle_br] Utilização do Comando Merge

2008-08-28 Por tôpico francisco porfirio
Marcio, xou de bola esse site

Pessoa queria mais uma ajuda

Tipo ele ta comparando apenas pela pk tendo igual ele sempre altera os
registros. Quero que ele altere apenas quando estes registros forem
diferentes. Coloquei as clausulas no on, mas não ta funcionando. Com isso
esta mais ou menos assim.



BEGIN
MERGE INTO inf_coberturas M
USING t.inf_coberturas T
ON (m.cob_codigo_cobertura = t.cob_codigo_cobertura
AND (m.cob_descricao  = t.cob_descricao
 OR m.cob_mapa_cobertura  = t.cob_mapa_cobertura
 OR m.cob_cod_intercambio_ptu = t.cob_cod_intercambio_ptu
 OR m.cob_mapa_alterado   = t.cob_mapa_alterado))
WHEN MATCHED THEN UPDATE SET m.cob_descricao = t.cob_descricao,
 m.cob_mapa_cobertura = t.cob_mapa_cobertura
WHEN NOT MATCHED THEN INSERT
  VALUES(CASE etl.merge_counter(etl.c_inserting) WHEN 0
THEN t.cob_codigo_cobertura END,
 t.cob_descricao,t.cob_mapa_cobertura,
 t.cob_cod_intercambio_ptu,
t.cob_mapa_alterado);

   DBMS_OUTPUT.PUT_LINE(TO_CHAR(SQL%ROWCOUNT) || ' - Linhas
merged.');
   dbms_output.put_line(TO_CHAR(etl.get_merge_insert_count) ||' - Linhas
Inseridas');
   dbms_output.put_line(TO_CHAR(etl.get_merge_update_count( SQL%ROWCOUNT ))
||' - Linhas Alteradas');
END;


-- 
Atenciosamente
Francisco Porfirio Ribeiro Neto


[As partes desta mensagem que não continham texto foram removidas]



Re: [oracle_br] Utilização do Comando Merge

2008-08-28 Por tôpico Marcio Portes
??
Não entendi qual a sua necessidade.

2008/8/28 francisco porfirio [EMAIL PROTECTED]

   Marcio, xou de bola esse site

 Pessoa queria mais uma ajuda

 Tipo ele ta comparando apenas pela pk tendo igual ele sempre altera os
 registros. Quero que ele altere apenas quando estes registros forem
 diferentes. Coloquei as clausulas no on, mas não ta funcionando. Com isso
 esta mais ou menos assim.

 BEGIN
 MERGE INTO inf_coberturas M
 USING t.inf_coberturas T
 ON (m.cob_codigo_cobertura = t.cob_codigo_cobertura
 AND (m.cob_descricao = t.cob_descricao
 OR m.cob_mapa_cobertura = t.cob_mapa_cobertura
 OR m.cob_cod_intercambio_ptu = t.cob_cod_intercambio_ptu
 OR m.cob_mapa_alterado = t.cob_mapa_alterado))
 WHEN MATCHED THEN UPDATE SET m.cob_descricao = t.cob_descricao,
 m.cob_mapa_cobertura = t.cob_mapa_cobertura
 WHEN NOT MATCHED THEN INSERT
 VALUES(CASE etl.merge_counter(etl.c_inserting) WHEN 0
 THEN t.cob_codigo_cobertura END,
 t.cob_descricao,t.cob_mapa_cobertura,
 t.cob_cod_intercambio_ptu,
 t.cob_mapa_alterado);

 DBMS_OUTPUT.PUT_LINE(TO_CHAR(SQL%ROWCOUNT) || ' - Linhas
 merged.');
 dbms_output.put_line(TO_CHAR(etl.get_merge_insert_count) ||' - Linhas
 Inseridas');
 dbms_output.put_line(TO_CHAR(etl.get_merge_update_count( SQL%ROWCOUNT ))
 ||' - Linhas Alteradas');
 END;


 --
 Atenciosamente
 Francisco Porfirio Ribeiro Neto

 [As partes desta mensagem que não continham texto foram removidas]

  




-- 
Marcio Portes
http://mportes.blogspot.com


[As partes desta mensagem que não continham texto foram removidas]



Re: [oracle_br] Utilização do Comando Merge

2008-08-27 Por tôpico Marcio Portes
http://www.quest-pipelines.com/newsletter-v4/0903_D.htm

2008/8/27 francisco porfirio [EMAIL PROTECTED]

   Pessoal...

 Sei que muitos já devem conhecer este comando, mas para aqueles que não
 conhecem, vai uma boa dica para fazer algumas migrações mais simples. Com
 esse comando vc consegue tanto contemplar novos registros de uma tabela
 como
 atualizar os que foram alterados.

 A sintaxe é mais ou menos com esta:

 MERGE INTO tb_destino d
 USING tb_origem o
 ON (d.codigo = o.codigo)
 WHEN MATCHED THEN d.descricao = o.descricao
 WHEN not MATCHED THEN
 INSERT (d.codigo,d.descricao)
 VALUES (d.codigo, d.descricao);

 Para aqueles que já utilizaram, vocês sabem me informar se tem alguma forma
 de o merge me retornar quantas linhas foram atualizadas e quantas foram
 inseridas?

 Agradeço desde já...

 --
 Atenciosamente
 Francisco Porfirio Ribeiro Neto

 [As partes desta mensagem que não continham texto foram removidas]

  




-- 
Marcio Portes
http://mportes.blogspot.com


[As partes desta mensagem que não continham texto foram removidas]