Olá!

Tenho a seguinte estrutura em tabelas no PostGreSQL:

endereço
  idt int primary key
responsavel
  cpf varchar(14) primary key
  idt_endereco foreign key(endereco)
empresa
  cnpj varchar(18) primary key
  responsavel foreign key (responsavel)
  idt_endereco foreign key (endereco)

Tomando como base a seguinte massa de dados teríamos:

endereco
  idt
  1 // endereço do responsavel
  2 // endereço da empresa

responsavel
  cpf           idt_endereco
  123.456.789-12        1

empresa
  cnpj          responsavel                         idt_endereco
  01.123.456/0001-78    123.456.789-12  2

O endereço é cadastrado sem erros.
O responsavel também é cadastrado sem erros.

Ao cadastrar a empresa, ocorre exceção (violação de chave estrangeira) acusando
que o responsavel não existe, embora não tenha ocorrido exceção ao cadastrá-lo;

Fiz a seguinte alteração: Retirei a chave estrangeira da empresa que aponta para
o responsavel.

Tentei realizar novamente o cadastro e neste caso passou a ser gerada exceção
com relação ao Endereço da empresa .

Retirei também a chave estrangeira da empresa que apontava para o endereço,
tentei novamente, e para minha surpresa, desta vez acusou exceção na tabela de
responsavel com relação ao endereço.

Apesar do dado pendente ser cadastrado sem gerar exceção, o PostGreSQL acusa que
o mesmo não existe nas tabelas primarias e gera exceção de foreign key.

Obs 1.
Como não posso ter um endereço pendurado, sem está relacionado com um
responsavel ou uma empresa; Da mesma forma que não posso ter um responsavel
pendurado sem empresa, O "commit" só ocorre no final do cadastro da empresa,
caso não ocorra nenhuma exceção. Ocorrendo exceção em qualquer um dos "insert",
é executado "rollback" em todo processo.

obs 2.
Isso estava funcionando perfeitamente, sem problema algum!

O que pode está acontecendo?!

Desde já, muito obrigado a todos!

___________________________________________________________________________________
Agora todas as suas ligações DDD e DDI com o 21 vêm junto com a conta do seu
telefone de casa ou celular. 
Mais comodidade e praticidade para você. Faz um 21 e aproveite!
Olá Miguel.

Não é prepare e sim perform o comando.

Mas como a sua função não vai retornar nenhum parâmetro, coloque somente
a função sem o perform ou o select.

 

[]’s

 

Lucio

 

-----Mensagem original-----
De: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] Em nome de Miguel Scarano
Bordallo
Enviada em: quinta-feira, 25 de maio de 2006 14:02
Para: [email protected]
Assunto: Re: [PostgreSQL-Brasil] RES: Prepare e Execute

 

Vlw Lúcio, não fui esquecido! =)

 

Seguinte, eu tentei de várias formas. Sei que o execute não é pra ser
usado pra essas coisas, só pra executar uma PREPARE.

Eu tenho tentando chamar essa função_2 de dentro da função_1 dando
select nome_funcao(param_1).

O erro que está dando diz algo como: se a função não retorna valor, use
prepare. Não lembro direito a frase.

Eu vou tentar só colocando o nome da função.

 

Só me fala uma coisa, num caso desse da função ser só pra executar
comandos e não retornar nada, eu tenho que usar returns void nela? Posso
omitir o returns ou returns outro tipo de dado?

 

Vlw.

Olá Miguel.

Não é prepare e sim perform o comando.

Mas como a sua função não vai retornar nenhum parâmetro, coloque somente a função sem o perform ou o select.

 

[]’s

 

Lucio

 

-----Mensagem original-----
De: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Em nome de Miguel Scarano Bordallo
Enviada em: quinta-feira, 25 de maio de 2006 14:02
Para: [email protected]
Assunto: Re: [PostgreSQL-Brasil] RES: Prepare e Execute

 

Vlw Lúcio, não fui esquecido! =)

 

Seguinte, eu tentei de várias formas. Sei que o execute não é pra ser usado pra essas coisas, só pra executar uma PREPARE.

Eu tenho tentando chamar essa função_2 de dentro da função_1 dando select nome_funcao(param_1).

O erro que está dando diz algo como: se a função não retorna valor, use prepare. Não lembro direito a frase.

Eu vou tentar só colocando o nome da função.

 

Só me fala uma coisa, num caso desse da função ser só pra executar comandos e não retornar nada, eu tenho que usar returns void nela? Posso omitir o returns ou returns outro tipo de dado?

 

Vlw.

_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
http://www.postgresql.org.br
_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
http://www.postgresql.org.br

Responder a