RES: [oracle_br] Comando Merge
O problema é que não tenho 2 tabelas envolvidas, somente 1 = TESTE3, conforme o exemploq passei: SQL ed Wrote file afiedt.buf 1 MERGE INTO TESTE3 T 2 USING(SELECT COD,NOME 3 FROM TESTE3 WHERE COD = 2 ) TE 4 ON ( T.COD = TE.COD ) 5 WHEN MATCHED THEN 6 UPDATE SET NOME = 'ACHOU' 7 WHEN NOT MATCHED THEN 8 INSERT (T.COD,T.NOME) 9* VALUES(2,'NOVO') RAPHAEL-agricola / MERGE INTO TESTE3 T * ERROR at line 1: ORA-30926: unable to get a stable set of rows in the source tables SQL att. Raphael De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em nome de francisco porfirio Enviada em: terça-feira, 16 de setembro de 2008 09:27 Para: oracle_br@yahoogrupos.com.br Assunto: Re: [oracle_br] Comando Merge Raphael você pode fazer sim essa substituição. Pelo seguinte comando MERGE INTO tab1 t USING (SELECT campo1, campo2 FROM tab2 WHERE taa_codigo = 2 ) TE ON ( t.campo1= te.campo2 ) WHEN MATCHED THEN UPDATE SET t.campo2 = 'achou' WHEN NOT MATCHED THEN INSERT (campo1,campo2) VALUES(2,'novo') -- Atenciosamente Francisco Porfirio Ribeiro Neto [As partes desta mensagem que não continham texto foram removidas]
RES: [oracle_br] Comando MERGE
2007-07-30
Por tôpico
Jader Resende de Souza - Gestor de Atendimento - Núcleo Relatório Suporte - Engeman EAM
Marcio! Muito obrigado. Consegui resolver o problema. Na verdade eu estava informando errado os campos no UPDATE. Valeu!! Atenciosamente, Jader Resende de Souza De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em nome de Marcio Portes Enviada em: sexta-feira, 27 de julho de 2007 20:42 Para: oracle_br@yahoogrupos.com.br Assunto: Re: [oracle_br] Comando MERGE Jader, Voce deve estar usando a versão 10.1, que é onde essa mensagem está desajustada, ora vem do dbms_scheduler, ora do merge. O problema no seu merge está no update: na medida em que voce tenta alterar um campo da cláusula ON. Se minha dedução estiver errada, faça um exemplo no sqlplus copiando e colando para a lista assim como vou fazer a seguir. ops$marcio:LX10G create table t1 ( pk int primary key, c1 varchar2(10) ); Table created. ops$marcio:LX10G create table t2 ( pk int primary key, c1 varchar2(10) ); Table created. ops$marcio:LX10G ops$marcio:LX10G insert into t1 values ( 1, 'Abacate' ); 1 row created. ops$marcio:LX10G insert into t1 values ( 2, 'Tomate' ); 1 row created. ops$marcio:LX10G ops$marcio:LX10G insert into t2 values ( 1, 'vai mudar' ); 1 row created. ops$marcio:LX10G ops$marcio:LX10G ops$marcio:LX10G select * from t1; PK C1 - -- 1 Abacate 2 Tomate 2 rows selected. ops$marcio:LX10G select * from t2; PK C1 - -- 1 vai mudar 1 row selected. ops$marcio:LX10G ops$marcio:LX10G ops$marcio:LX10G merge into t2 A using (select t1.pk, t1.c1 from t1) B on ( B.pk = A.pk ) 2 when matched then update set A.c1 = B.c1 3 when not matched then insert ( A.pk, A.c1 ) values ( B.pk, B.c1 ) 4 / 2 rows merged. ops$marcio:LX10G ops$marcio:LX10G select * from t1; PK C1 - -- 1 Abacate 2 Tomate 2 rows selected. ops$marcio:LX10G select * from t2; PK C1 - -- 1 Abacate 2 Tomate 2 rows selected. ops$marcio:LX10G ops$marcio:LX10G rollback; Rollback complete. ops$marcio:LX10G ops$marcio:LX10G merge into t2 A using (select t1.pk, t1.c1 from t1) B on ( B.pk = A.pk ) 2 when matched then update set A.pk = B.pk 3 when not matched then insert ( A.pk, A.c1 ) values ( B.pk, B.c1 ) 4 / merge into t2 A using (select t1.pk, t1.c1 from t1) B on ( B.pk = A.pk ) * ERROR at line 1: ORA-38104: Columns referenced in the ON Clause cannot be updated: A.PK ops$marcio:LX10G Veja que eu não consigo reproduzir a sua mensagem de erro já que meu oracle é o 10.2 abraços, On 7/27/07, Jader Resende de Souza - Gestor de Atendimento - Núcleo Relatório Suporte - Engeman EAM [EMAIL PROTECTED] mailto:jader.resende%40engeman.com.br wrote: Senhores, Boa tarde. Estou tentando executar o comando MERGE da seguinte forma: MERGE INTO user_tab2 A USING (select user_tab1.u_pk_cod, user_tab1.u_desc from user_tab1) B ON (A.u_pk_cod = B.u_pk_cod) WHEN MATCHED THEN UPDATE SET A.u_pk_cod = B.u_pk_cod WHEN NOT MATCHED THEN INSERT (A.u_pk_cod, A.u_desc) VALUES (B.u_pk_cod, B.u_desc) Estou tendo como retorno o seguinte erro: ORA-27432: a etapa não existe para a cadeia . Alguém sabe me dizer o que pode ser isso? Jader! De: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br oracle_br%40yahoogrupos.com.br [mailto: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br oracle_br%40yahoogrupos.com.br] Em nome de jlchiappa Enviada em: sexta-feira, 27 de julho de 2007 15:22 Para: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br oracle_br%40yahoogrupos.com.br Assunto: [oracle_br] Re: Erro de ORA - Urgente - O erro é no disco, certo? PODE SER, como pode não ser : como já dito algumas vezes aqui, necessariamente durante a operação do banco Oracle os blocos ** são ** carregados pra RAM e lá permanecem um tempo, mesmo depois dum COMMIT, certamente um pente de memória ruim ** PODE SIM SENHOR ** corromper um bloco Da mesma forma bugs podem causar isso, seja no SO, seja no próprio banco, seja em drivers/utilitários/aplicativos de SO (como softwares de storage, por exemplo)... E finalmente, tranquilamente ERROS DE OPERAÇÂO podem causar corrupção, como por exemplo recover de banco após uma operação NOLOGGING, um operador querendo (via utilitário do sistema, como antivírus ou soft de backup não-compatíveis) manipular arquivos do banco Oracle com banco aberto Tem alguma forma de corrigir este problema? Sem dúvida, o procedimento será : a. para emergencialmente se livrar da condição de erro, é localizar o segmento e o extent localizados no bloco corrupto (consultando a DBA_EXTENTS), feito isso SE o segmento for do tipo que possa ser re- construído sem perda (como um índice, por exemplo), marque o bloco como indisponível via DBMS_REPAIR (cheque os manuais de Admin pra sintaxe e modo de usar), e reconstrua o segmento. Caso esse bloco seja de um segmento de dados, que vc não pode perder, OU vc faz um block recover (se vc
RES: [oracle_br] Comando MERGE
Insira ou atualize linhas da tabela TAB1 para corresponder à tabela TAB2. ###3 MERGE INTO TAB1 c USING TAB2 e ON (c.employee_id = e.employee_id) WHEN MATCHED THEN UPDATE SET c.first_name = e.first_name, c.last_name = e.last_name, ... c.department_id = e.department_id WHEN NOT MATCHED THEN INSERT VALUES(e.employee_id, e.first_name, e.last_name, e.email, e.phone_number, e.hire_date, e.job_id, e.salary, e.commission_pct, e.manager_id, e.department_id); ###3 -Mensagem original- De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em nome de Kalango Brasilis Enviada em: segunda-feira, 18 de junho de 2007 15:02 Para: oracle_br@yahoogrupos.com.br Assunto: [oracle_br] Comando MERGE Boa tarde, amigos ! Alguem poderia me ajudar com a sintaxe do comando MERGE ? Se eu não estou enganado ele faz insert e/ou update em várias tabelas ao mesmo tempo. Eu gostaria de saber se é essa mesmo sua função e qual seria a sintexe p/ fazer um insert/update em 06 tabelas a partir de um select. Obrigado a todos. OBS: Oracle versão: 10.2.0.1.0 Obrigado a todos que puderem me ajudar. Eric Arantes Novo Yahoo! Cadê? - Experimente uma nova busca. http://yahoo.com.br/oqueeuganhocomisso [As partes desta mensagem que não continham texto foram removidas] Apostilas » Dicas e Exemplos » Funções » Mundo Oracle » Package » Procedure » Scripts » Tutoriais acesse: http://www.oraclebr.com.br/codigo/ListaCodigo.php -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ Links do Yahoo! Grupos