É 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 <[email protected]> Olá, Em 18 de março de 2010 21:31, Nilson Chagas <[email protected]> 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 [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral []s -- JotaComm http://jotacomm.wordpress.com _______________________________________________ pgbr-geral mailing list [email protected] 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 [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
