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-----
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?
|
_______________________________________________ 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
