2012/9/3 Eduardo Az - EMBRASIS <[email protected]> > Pessoal > > Imaginem as seguintes tabelas hipotéticas: > > CREATE TABLE cadastro > ( > id serial NOT NULL, > nome character varying(30) NOT NULL, > nasc_dt date, > CONSTRAINT cadastro_pkey PRIMARY KEY (id ), > ); > > CREATE TABLE cadastro_obs > ( > cadastro integer NOT NULL, > obs character varying(70), > CONSTRAINT cadastro_obs_pkey PRIMARY KEY (cadastro ), > CONSTRAINT cadastro_obs_cadastro_fkey FOREIGN KEY (cadastro) > REFERENCES cadastro (id) MATCH SIMPLE > ON UPDATE CASCADE ON DELETE CASCADE > ); > > Estou querendo criar uma function para inserir estes dados no banco. > > Criar a função pensando somente na primeira tabela, ok. > Agora, tenho duas tabelas relacionadas. tentei usar o NEW. na segunda > tabela para “pegar” o código serial gerado na primeira, mas, não tive > sucesso. > > Como seria neste caso? Não encontrei documentação sobre isto. > > OBS: esta tabela é um exemplo. > >
Cara, você está com um problema que acho bem comum. Mas não há "uma" solução. Primeiro, estude sobre sequences, e saiba que um tipo serial usa sequence. Com sequences, você tem então as alternativas: * chamar a nextval e armazenar o valor em uma variável (pode ser retorno da função de inserção, por exemplo); * usar a cláusula RETURNING junto com o INSERT INTO (eu gosto mais dessa); * usar o currval (saiba que ela retorna por sessão, ou seja, retorna o último valor gerado na SUA sessão e não no geral, portanto é segura). Acho que são essas. Se possível você pode usar chaves naturais, procure no histórico da lista, tem discussões imensas sobre o assunto. Atenciosamente, -- Matheus de Oliveira
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
