Procedure com erro

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
caioamante
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 18
Registrado em: Sex, 25 Set 2009 8:34 am
Localização: Caçapava - Sp
Caiovisk

Amigos estou fazendo uma procedure que esta dando problema dizendo que não está encontrando a chave mae.

Selecionar tudo

PROCEDURE sp_inicia_fluxo(p_flu_via_codigo number)
AS
v_km_inicial number(10);
BEGIN
	 SELECT 	 b.vei_km INTO v_km_inicial

 	 FROM 	 		  viagem  a,
				      veiculo b
	 WHERE a.via_vei_codigo = b.vei_codigo
		   AND a.via_codigo = p_flu_via_codigo;

     INSERT INTO fluxo
   	 	   VALUES (seq_fluxo.nextval,p_flu_via_codigo,sysdate,null,v_km_inicial,null,'A');
END;



Eu não posso jogar v_km_inicial como insert na tabela?
valeu
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Posta o erro no fórum
caioamante
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 18
Registrado em: Sex, 25 Set 2009 8:34 am
Localização: Caçapava - Sp
Caiovisk

Segue o erro

Selecionar tudo

ORA-02291: restrição de integridade (CAIOAMANTE.SYS_C004108) violada - chave mãe não localizada
ORA-06512: em "CAIOAMANTE.SP_INICIA_FLUXO", line 12
ORA-06512: em line 2
caioamante
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 18
Registrado em: Sex, 25 Set 2009 8:34 am
Localização: Caçapava - Sp
Caiovisk

e a procedure que estou tentando rodar é

Selecionar tudo

begin
sp_inicia_fluxo(21);
end;
esse codigo de viagem 21 busca o km e já a quantidade 0 de km na variavel... seria para alimentar a tabela de fluxo como km inicial 0
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Sua tabela FLUXO referencia uma outra tabela através de uma foreign key, e o registro que você apontou lá na outra tabela não existe. Ou crie o registro lá na outra ou mude os dados para um registro que exista lá.

Roda o select abaixo para ver a FK que está dando erro para você r (CAIOAMANTE.SYS_C004108) e qual tabela e colunas.

Selecionar tudo

select c2.owner, c2.constraint_name, c2.table_name, cc.*
  from all_constraints c 
  join all_constraints c2 on c.r_owner = c2.owner and c.r_constraint_name = c2.constraint_name
  join all_cons_columns cc on cc.owner = c2.owner and cc.constraint_name = c2.constraint_name
 where c.constraint_type = 'R' and c.table_name = 'FLUXO'
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Só para esclarecer, o erro é no comando de insert, e você vai ter que corrigir os values que estão sendo inseridos ou incluir linhas novas na tabela que a fluxos referencia.
caioamante
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 18
Registrado em: Sex, 25 Set 2009 8:34 am
Localização: Caçapava - Sp
Caiovisk

apareceu a tabela fluxo nos 2 nomes de tabela.. que estranhoo..
caioamante
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 18
Registrado em: Sex, 25 Set 2009 8:34 am
Localização: Caçapava - Sp
Caiovisk

Selecionar tudo

CREATE TABLE FLUXO ( 
  FLU_CODIGO      NUMBER (10)   NOT NULL, 
  FLU_VIA_CODIGO  NUMBER (10), 
  FLU_HR_INICIO   DATE          NOT NULL, 
  FLU_HR_FIM      DATE, 
  FLU_KM_INICIO   NUMBER (10)   NOT NULL, 
  FLU_KM_FIM      NUMBER (10), 
  FLU_STATUS      CHAR (1), 
   CONSTRAINT CK_FLU_STATUS
          CHECK (flu_status  in ('A','I')), 
  PRIMARY KEY ( FLU_CODIGO ) ) ; 

ALTER TABLE FLUXO ADD 
 FOREIGN KEY (FLU_VIA_CODIGO) 
  REFERENCES CAIOAMANTE.FLUXO (FLU_CODIGO) ;

Acredito que o problema esteja aqui...
caioamante
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 18
Registrado em: Sex, 25 Set 2009 8:34 am
Localização: Caçapava - Sp
Caiovisk

Amigo fic muito grato pela ajuda... consegui resolver... realmente é o que você me passou .. como pode ver eu estava referenciando a propia tabela.

muito obrigado.
caioamante
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 18
Registrado em: Sex, 25 Set 2009 8:34 am
Localização: Caçapava - Sp
Caiovisk

[RESOLVIDO]
Responder
  • Informação