Re: [pgbr-geral] Insert Condicional..

2010-03-19 Por tôpico Nilson Chagas
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


Re: [pgbr-geral] Insert Condicional..

2010-03-19 Por tôpico Danilo [INFORTECH]
É 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


[pgbr-geral] Insert Condicional..

2010-03-18 Por tôpico Nilson Chagas
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

-- 
[]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


Re: [pgbr-geral] Insert Condicional..

2010-03-18 Por tôpico Dickson S. Guedes
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

Não entendi muito bem o que você quer, mas para não passar em branco o
cantar da pedra vai aqui um exemplo do que eu pude entender.

---
postgres=# CREATE TEMP TABLE a (codigo int, nome varchar);
CREATE TABLE
postgres=# CREATE TEMP TABLE b (codigo int, data date);
CREATE TABLE
postgres=# INSERT INTO b VALUES (1,'2001/10/09');
INSERT 0 1
postgres=# INSERT INTO b VALUES (2,'2002/10/09');
INSERT 0 1
postgres=# INSERT INTO b VALUES (3,'2002/11/09');
INSERT 0 1
postgres=# INSERT INTO b VALUES (4,'2010/01/09');
INSERT 0 1
postgres=# INSERT INTO a SELECT 1, 'JOAO' FROM B WHERE 1=b.codigo;
INSERT 0 1
postgres=# INSERT INTO a SELECT 5, 'PEDRO' FROM B WHERE 5=b.codigo;
INSERT 0 0
postgres=# INSERT INTO a SELECT 4, 'MARIA' FROM B WHERE 4=b.codigo;
INSERT 0 1
postgres=# SELECT * from b;
 codigo |data
+
  1 | 2001-10-09
  2 | 2002-10-09
  3 | 2002-11-09
  4 | 2010-01-09
(4 linhas)

postgres=# SELECT * from a;
 codigo | nome
+---
  1 | JOAO
  4 | MARIA
(2 linhas)
---

[]s
Dickson S. Guedes
mail/xmpp: gue...@guedesoft.net - skype: guediz
http://guedesoft.net - http://www.postgresql.org.br
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Insert Condicional..

2010-03-18 Por tôpico JotaComm
Olá,

Em 18 de março de 2010 21:31, Nilson Chagas
nilson.chagas.si...@gmail.comescreveu:

 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