RES: [oracle_br] Comando Merge

2008-09-16 Por tôpico Raphael Peetz Franco
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

2007-06-20 Por tôpico Geisel S Polycarpo


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