Em 3 de setembro de 2012 16:01, Eduardo Az - EMBRASIS <
[email protected]> escreveu:
> 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.
>
>
Eduardo,
Td bem contigo??
Vc pode usar a função "currval" para recuperar o último valor incrementado
pela sequence que é gerada automaticamente pelo "serial". Veja o exemplo:
bdteste=# CREATE TABLE cadastro (
bdteste(# id serial NOT NULL,
bdteste(# nome character varying(30) NOT NULL,
bdteste(# nasc_dt date,
bdteste(# CONSTRAINT cadastro_pkey PRIMARY KEY (id )
bdteste(# );
NOTICE: CREATE TABLE will create implicit sequence "cadastro_id_seq" for
serial column "cadastro.id"
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index
"cadastro_pkey" for table "cadastro"
CREATE TABLE
bdteste=# CREATE TABLE cadastro_obs (
bdteste(# cadastro integer NOT NULL,
bdteste(# obs character varying(70),
bdteste(# CONSTRAINT cadastro_obs_pkey PRIMARY KEY (cadastro ),
bdteste(# CONSTRAINT cadastro_obs_cadastro_fkey FOREIGN KEY (cadastro)
bdteste(# REFERENCES cadastro (id) MATCH SIMPLE
bdteste(# ON UPDATE CASCADE ON DELETE CASCADE
bdteste(# );
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index
"cadastro_obs_pkey" for table "cadastro_obs"
CREATE TABLE
bdteste=# INSERT INTO cadastro (nome, nasc_dt)
bdteste-# VALUES ('Eduardo', '1978-01-01');
INSERT 0 1
bdteste=# INSERT INTO cadastro_obs (cadastro, obs)
bdteste-# VALUES (currval('cadastro_id_seq'), 'Obs Eduardo');
INSERT 0 1
bdteste=# INSERT INTO cadastro (nome, nasc_dt)
bdteste-# VALUES ('Fabrizio', '1978-01-01');
INSERT 0 1
bdteste=# INSERT INTO cadastro_obs (cadastro, obs)
bdteste-# VALUES (currval('cadastro_id_seq'), 'Obs Fabrizio');
INSERT 0 1
bdteste=# SELECT *
bdteste-# FROM cadastro
bdteste-# JOIN cadastro_obs ON cadastro_obs.cadastro = cadastro.id;
id | nome | nasc_dt | cadastro | obs
----+----------+------------+----------+--------------
1 | Eduardo | 1978-01-01 | 1 | Obs Eduardo
2 | Fabrizio | 1978-01-01 | 2 | Obs Fabrizio
(2 rows)
Att,
--
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