Muito obrigado a todos! Abs
Bruno Neiva Moreno http://about.me/brunomoreno Em 6 de março de 2012 11:29, Matheus de Oliveira <[email protected]>escreveu: > Eu recomendaria usar o RETURNING do insert: > > BEGIN; > INSERT INTO tb_grupo_subcontas (nome) > VALUES ('Teste') > RETURNING id > INTO id_grupo2; > INSERT INTO tb_grupo_subcontas_subcontas (id_grupo, id_subconta) > VALUES (id_grupo2, 1); > INSERT INTO tb_grupo_subcontas_subcontas (id_grupo, id_subconta) > VALUES (id_grupo2, 2); > COMMIT; > > Estou assumindo que você está dentro de uma FUNCTION. > > abços > -- > Matheus de Oliveira > > Bacharelado em Ciências de Computação > Laboratório de Computação de Alto Desempenho - > LCAD<http://www.lcad.icmc.usp.br/> > Instituto de Ciências Matemáticas e de Computação - > ICMC<http://www.icmc.usp.br/> > Universidade de São Paulo - USP <http://www.sc.usp.br/> > > > > > On Tue, Mar 6, 2012 at 11:08 AM, Fabrízio de Royes Mello < > [email protected]> wrote: > >> >> >> Em 6 de março de 2012 11:01, Bruno Moreno <[email protected]>escreveu: >> >> Pessoal, estou com uma pequena dúvida quanto ao uso do tipo SERIAL no PG. >>> Tenho um relacionamento NxN e uma dessas tabelas tem um identificador do >>> tipo SERIAL. Preciso recuperar o último valor para colocar na relação que >>> realiza o relacionamento. Tentei tal qual a SQL abaixo porém o PG sempre me >>> retorna uma mensagem assim: *"ERRO: could not open relation with OID >>> 3".* >>> * >>> * >>> Estou procedendo da maneira correta? Para pegar o valor corrente eu >>> utilizei a função *curval*(). O que pode estar dando errado? >>> >>> *BEGIN;* >>> *insert into tb_grupo_subcontas (nome) values ('Teste');* >>> *select currval(id) into id_grupo2 from tb_grupo_subcontas;* >>> *insert into tb_grupo_subcontas_subcontas (id_grupo, id_subconta) >>> values (id_grupo2, 1);* >>> *insert into tb_grupo_subcontas_subcontas (id_grupo, id_subconta) >>> values (id_grupo2, 2);* >>> *END;* >>> *COMMIT;* >>> >>> >> Vc está utilizando a função "currval" [1] de maneira incorreta. Vc >> precisa passar para ela o nome da sequence que foi incrementada pelo último >> "nextval" dentro da sessão. O correto seria mais ou menos assim: >> >> BEGIN; >> INSERT INTO tb_grupo_subcontas (nome) VALUES ('Teste'); >> INSERT INTO tb_grupo_subcontas_subcontas (id_grupo, id_subconta) >> VALUES (currval('tb_grupo_subcontas_id_seq'), 1); >> INSERT INTO tb_grupo_subcontas_subcontas (id_grupo, id_subconta) >> VALUES (currval('tb_grupo_subcontas_id_seq'), 2); >> COMMIT; >> >> Pode ser que vc precise fazer algum ajuste no exemplo acima, mas creio >> que já seja um bom começo. >> >> >> [1] http://www.postgresql.org/docs/9.1/static/functions-sequence.html >> >> -- >> Fabrízio de Royes Mello >> Consultoria/Coaching PostgreSQL >> >> Blog sobre TI: http://fabriziomello.blogspot.com >> >> Perfil Linkedin: http://br.linkedin.com/in/fabriziomello >> >> Twitter: http://twitter.com/fabriziomello >> >> >> _______________________________________________ >> pgbr-geral mailing list >> [email protected] >> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral >> >> > > _______________________________________________ > pgbr-geral mailing list > [email protected] > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > >
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
