Em Sex, 2015-02-20 às 12:37 -0200, Matheus de Oliveira escreveu:
>
>
> 2015-02-20 12:13 GMT-02:00 Matheus Saraiva
> <[email protected]>:
>
> Em Sex, 2015-02-20 às 09:43 -0200, Matheus de Oliveira
> escreveu
>
>
>
>
> > Você irá precisar de um tipo composto, esse tipo pode ser um
> > criado via CREATE TYPE ou uma tabela. No caso da tabela você
> > precisa informar todas colunas da mesma, o que pode não ser
> > necessário.
>
>
>
>
> Dei uma olhada na documentação, corrija-me se eu estiver
> errado, mas não é necessário criar um tipo composto. Quando
> uma tabela é criada um tipo composto com o nome e com os
> campos da tabela também é criado.
>
>
>
> Você está correto, e é como eu comentei acima (em destaque - para quem
> aceita e-mail com HTML).
>
>
> Não posso usar VARIADIC pois a função receberá outros
> parâmetros além do tipo composto, exemp: funcInsert(nome
> varchar, pai int, mae int, nascimento date, filhos
> TipoComposto[]).
>
>
>
>
> Sem problemas, você pode usar o último parâmetro como VARIADIC. A
> escolha se isso é melhor ou não é sua, pelo caso eu diria que pode
> ficar confuso.
>
Vamos para a pratica, exemplo:
Tabela Clientes (id, nome, telefone, endereco, datanasc), tabela
Filhos(nome, idade, genitor integer FK - > CLIENTES)
Partindo do principio que todas as tabela tem um tipo composto pensei na
função assim (Esse exemplo não mostra caracteres e algumas palavras
chave obrigatórias pela sintaxe. A intenção é apenas exemplificar a
lógica.):
funcInsertCliente(f_nome varchar, f_telefone varchar, f_endereco
integer, f_datanasc, f_filhos Filhos[]) RETURN boolean
BEGIN
INSERT INTO Clientes
(
nome,
telefone,
endereco,
datanasc
) VALUES($1, $2, $3, $4);
INSERT INTO Filhos
(
nome,
idade,
genitor,
);
RETURN TRUE;
EXCEPTION
WHEN NOT_NULL_VIOLATION THEN
RAISE NOTICE 'Required filds are blank';
RETURN FALSE;
WHEN UNIQUE_VIOLATION THEN
RAISE NOTICE 'One or more unique keys were violated';
RETURN FALSE;
WHEN RESTRICT_VIOLATION THEN
RAISE NOTICE 'One or more restricts were violated';
RETURN FALSE;
END;
Essa lógica daria certo? Tenho minha dúvidas pois não sei se quando o
filho for cadastrado o genitor já terá sido incluído, caso contrário
ocorreria uma violação de FK.
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral