É possível também fazer esta comparação diretamente no banco através de RULE
como segue um exemplo abaixo:
CREATE TABLE tabelaa (
codigo integer,
nome varchar(40)
);
CREATE TABLE tabelab (
codigo integer,
data date
);
CREATE OR REPLACE RULE rtabelaa AS
ON INSERT TO tabelaa
WHERE (NOT EXISTS (
SELECT codigo FROM tabelab WHERE (codigo = NEW.codigo)
)) DO INSTEAD NOTHING;
INSERT INTO tabelab VALUES
(1,'2010-03-01'),(2,'2010-03-11'),(4,'2010-03-05'),(6,'2010-03-13');
Registros na tabelab:
1;2010-03-01
2;2010-03-11
4;2010-03-05
6;2010-03-13
INSERT INTO tabelaa VALUES
(1,'JOÃO'),(2,'MARIA'),(3,'ZÉ'),(4,'PEDRO'),(4,'MANOEL'),(5,'TESTE');
Registros na tabelaa:
1;JOÃO
2;MARIA
4;PEDRO
4;MANOEL
Espero ter ajudado.
Abs.
Danilo
- Original Message -
From: Nilson Chagas
To: Comunidade PostgreSQL Brasileira
Sent: Friday, March 19, 2010 1:32 PM
Subject: Re: [pgbr-geral] Insert Condicional..
Valew pelas dicas.
Depois de parar e pensar melhor consegui atraves de um consulta no google uma
maneira da forma como eu precisava.
Não consigo achar agora o exemplo que vi, mas funcionaria assim.
- Cria uma trigger
- Declara uma variavel (var_codigo) do mesmo tipo do codigo
- faz um select (select into var_codigo codigo from tabela_b where codigo =
new.codigo)
- e compara if NOT_FOUND.
Mas eu tive que estacionar por enquanto, pq precisava trazer também o
$SESSION do PHP, e este campo não estava sendo gravado.
Então estou pensando se vai valer a pena fazer a comparação dentro do banco
ou via PHP, pq se for fazer via BANCO vou ter que acrescentar o campo $SESSION
as duas tabelas.
Mas muito obrigado, a dica de vocês já me serviram para outros cases.
2010/3/18 JotaComm jota.c...@gmail.com
Olá,
Em 18 de março de 2010 21:31, Nilson Chagas nilson.chagas.si...@gmail.com
escreveu:
Pessoal como eu montaria uma trigger/constraint para criar a seguinte
regra.
Tabela A
Codigo
Nome
Tabela B
Codigo
Data
Somente inseri registros na tabela A se existir o Codigo na Tabela B.
Não pode ser através de FK, pq a Tabela B é zerada a cada 2 horas.
Pensei em montar um trigger mas não sei como pegar o retorno do select e
o que informar no return.
Se alguém puder me cantar a pedra. rsrsrsrs
Também não entendi muito bem o que vocẽ deseja. Veja se é mais ou menos
isso que vocẽ quer:
CREATE TABLE tab1(codigo INTEGER PRIMARY KEY,nome VARCHAR(30));
CREATE TABLE tab2(codigo INTEGER PRIMARY KEY,nome VARCHAR(20),data
TIMESTAMP WITHOUT TIME ZONE);
CREATE OR REPLACE RULE exemplo_regra AS ON INSERT TO tab2 DO INSERT INTO
tab1 VALUES (NEW.codigo,NEW.nome);
postgres=# INSERT INTO tab2 VALUES (1,'JP',current_timestamp);
INSERT 0 1
postgres=# SELECT * FROM tab2;
codigo | nome |data
+--+
1 | JP | 2010-03-18 23:37:08.132421
(1 row)
postgres=# SELECT * FROM tab1;
codigo | nome
+--
1 | JP
(1 row)
--
[]s
Nilson Chagas - Ubuntu User 25794
---
Visite:
http://www.avozdoevangelho.com.br - Peça gratuitamente um curso Bíblico
Twitter: avozdoevangelho
Twitter: matrixspnet
http://www.amados.com.br
http://bbnradio.org - Ouça a rádio e faça gratuitamente um Curso Biblico
On-Line
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[]s
--
JotaComm
http://jotacomm.wordpress.com
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
--
[]s
Nilson Chagas - Ubuntu User 25794
---
Visite:
http://www.avozdoevangelho.com.br - Peça gratuitamente um curso Bíblico
Twitter: avozdoevangelho
Twitter: matrixspnet
http://www.amados.com.br
http://bbnradio.org - Ouça a rádio e faça gratuitamente um Curso Biblico
On-Line
--
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral