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 tiver backup RMAN atualizado) OU vc marca como
> inusável o bloco, dropa o segmento e volta backup (o procedimento
> exato varia de acordo com a tua política de backup), OU se não tiver
> backup atualizado vc pode tentar fazer um SALVAGE desse segmento , a
> nota Subject: Handling Oracle Block Corruptions in
> Oracle7/8/8i/9i/10g , de Doc ID: Note:28814.1 te lista as opções
> todas citadas.
>
> b. o MAIS IMPORTANTE, depois que vc passou a poder acessar o tal
> dado, vc IMEDIATAMENTE TEM QUE descobrir a causa, senão isso vai se
> repetir DE NOVO, e de NOVO, e DE NOVO..... Pra isso, é chamar uma
> Empresa de manutenção de hardware, que vai fazer um check ** PROFUNDO
> ** no hardware (ie, discos, RAM, controladora, placa-mãe, etc) do teu
> srevidor, ** levantar ** com o pessoal da Operação o que foi feito
> recentemente nessa máquina, que softs rodaram/foram instalados
> recentemente, E abrir chamado com a Oracle e com o teu Suporte de SO,
> pra ver o caso de bugs.
>
> []s
>
> Chiappa
>
> --- Em oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br>
<oracle_br%40yahoogrupos.com.br><mailto:
> oracle_br%40yahoogrupos.com.br> ,
> "cegoncalvesvr"
> <[EMAIL PROTECTED]> escreveu
> >
> > Ola meus amigos,
> >
> > Utilizando o sistema, no momento de gerar um relatorio, surgiu
> o
> > seguinte erro no sistema:
> >
> > ORA:01578 - Bloco de dados Oracle danificado (arquivo numero.13,
> > bloco num.845288). ORA:01110-13 do arquivo de
> > dados: 'E\Oracle\Oradata\cssj\MV2000_I.DBF - (Tablespace)
> >
> > Fui no servidor e abri o arquivo alert, o erro esta abaixo:
> > Corrupt block relative dba: 0x034ce5e8 (file 13, block 845288)
> > Bad check value found during buffer read
> > Data in bad block -
> > type: 6 format: 2 rdba: 0x034ce5e8
> > last change scn: 0x0000.057a7f29 seq: 0x2 flg: 0x04
> > consistency value in tail: 0x7f290602
> > check value in block header: 0xdea1, computed block checksum:
> 0x1000
> > spare1: 0x0, spare2: 0x0, spare3: 0x0
> > ***
> > Reread of rdba: 0x034ce5e8 (file 13, block 845288) found same
> > corrupted data
> >
> > - O erro é no disco, certo?
> > Tem alguma forma de corrigir este problema?
> > Isolar a area defeituosa?
> >
> > Aguardo.
> > Obrigado a todos.
> >
>
> [As partes desta mensagem que não continham texto foram removidas]
>
> 
>

-- 
Marcio Portes
Material Tecnico em Portugues - http://mportes.blogspot.com
<http://mportes.blogspot.com> 
Practical Learning Oracle -
http://mportes.blogspot.com/2006/02/practical-learning-oracle.html
<http://mportes.blogspot.com/2006/02/practical-learning-oracle.html> 

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



 


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

  • ... cegoncalvesvr
    • ... jlchiappa
      • ... Jader Resende de Souza - Gestor de Atendimento - Núcleo Relatório Suporte - Engeman EAM
        • ... Marcio Portes
          • ... Jader Resende de Souza - Gestor de Atendimento - Núcleo Relatório Suporte - Engeman EAM

Responder a