Resolvi o negócio, podem esquecer, valeu.

Roberto Amorim escreveu:
> Tenho uma procedure que pode copiar ou mover registro. A pk é composta 
> de três campos. Na procedure passo os trÊs campos de origem (ini) e os 
> três de destino (fim).  Porém quando mando copiar dá um erro de unique 
> constraint em correção de valores, o que é estranho, pois estou tentando 
> copiar um processo que só tem um registro nesta tabela. Enfim se 
> consulto a tabela de correçaõ o registro fim  não existe, se tento rodar 
> a procedure, dá erro de unique constraint. Está me faltando ve ro que?
> Roberto
> Oracle 8
>
> create or replace procedure prgrp_mover_processo(p_cd_emp_ini      in 
> number,
>                                                  p_cd_fil_ini      in 
> number,
>                                                  p_cd_processo_ini in 
> number,
>                                                  p_cd_emp_fim      in 
> number,
>                                                  p_cd_fil_fim      in 
> number,
>                                                  p_cd_processo_fim in 
> number,
>                                                  p_copiar_mover    in 
> varchar2) is
> begin
>     -- Aqui copia ao processo, registro pai
>     begin
>         insert into e0238_processos
>             (d0002_cd_emp,
>              d0004_cd_fil,
>              d0238_cd_processo,
>              d0232_cd_area,
>              d0231_cd_org)
>             select p_cd_emp_fim,
>                    p_cd_fil_fim,
>                    p_cd_processo_fim,
>                    d0232_cd_area,
>                    d0231_cd_org
>             from   e0238_processos
>             where  e0238_processos.d0002_cd_emp      = p_cd_emp_ini and
>                    e0238_processos.d0004_cd_fil      = p_cd_fil_ini and
>                    e0238_processos.d0238_cd_processo = p_cd_processo_ini;
>     exception
>         when others then
>             raise;
>     end;
>     -- Correção de Valores move ou copia os registros da tabela filha
>     if p_copiar_mover = 'C' then
>         begin
>             insert into e1516_correcao_valores
>                 (d0002_cd_emp,
>                  d0004_cd_fil,
>                  d0238_cd_processo,
>                  d1516_cd_indice,
>                  d1516_incidencia,
>                  d1516_data_ini,
>                  d1516_data_fim,
>                  d1516_valor_indice,
>                  d1516_seg_indice)
>                 select p_cd_emp_fim,
>                        p_cd_fil_fim,
>                        p_cd_processo_fim,
>                        d1516_cd_indice,
>                        d1516_incidencia,
>                        d1516_data_ini,
>                        d1516_data_fim,
>                        d1516_valor_indice,
>                        d1516_seg_indice
>                 from   e1516_correcao_valores
>                 where  d0002_cd_emp = p_cd_emp_ini and
>                        d0004_cd_fil = p_cd_fil_ini and
>                        d0238_cd_processo = p_cd_processo_ini;
>         exception
>             when others then
>                 raise;
>         end;
>     else
>         begin
>             update e1516_correcao_valores
>             set    d0002_cd_emp      = p_cd_emp_fim,
>                    d0004_cd_fil      = p_cd_fil_fim,
>                    d0238_cd_processo = p_cd_processo_fim
>             where  d0002_cd_emp = p_cd_emp_ini and
>                    d0004_cd_fil = p_cd_fil_ini and
>                    d0238_cd_processo = p_cd_processo_ini;
>         exception
>             when others then
>                 raise;
>         end;
>     end if;   
> -- Após passar todo o processo para nova localização deve-se apaga-lo na 
> localização antiga caso a opção seja mover.
>     if p_copiar_mover = 'M' then
>         begin
>             delete from e0238_processos
>             where  e0238_processos.d0002_cd_emp = p_cd_emp_ini and
>                    e0238_processos.d0004_cd_fil = p_cd_fil_ini and
>                    e0238_processos.d0238_cd_processo = p_cd_processo_ini;
>         exception
>             when others then
>                 raise;
>         end;
>     end if;
>     commit;
> exception
>     when others then
>         raise;
> end prgrp_mover_processo;
>
>
> Descrição da tabela de correção:
> create table E1516_CORRECAO_VALORES
> (
>   D0002_CD_EMP       NUMBER(2) not null,
>   D0004_CD_FIL       NUMBER(3) not null,
>   D0238_CD_PROCESSO  NUMBER(6) not null,
>   D1516_CD_INDICE    NUMBER(2) not null,
>   D1516_INCIDENCIA   VARCHAR2(1),
>   D1516_DATA_INI     DATE,
>   D1516_DATA_FIM     DATE,
>   D1516_VALOR_INDICE NUMBER(7,4),
>   D1516_SEG_INDICE   NUMBER(7,4)
> )
>
> alter table E1516_CORRECAO_VALORES
> add constraint PKGRP_1516_CORRECAO_VALORES
> primary key (D0002_CD_EMP,D0004_CD_FIL,D0238_CD_PROCESSO, D1516_CD_INDICE)
>
> alter table E1516_CORRECAO_VALORES
> add constraint FKGRP_1516_PROCESSOS
> foreign key (D0002_CD_EMP,D0004_CD_FIL,D0238_CD_PROCESSO)
> references E0238_PROCESSOS (D0002_CD_EMP,D0004_CD_FIL,D0238_CD_PROCESSO);
>
>
>
>   
>> 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
>
>  
>
>
>
>   

Responder a