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

Responder a