É 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

Responder a