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
Re: [pgbr-geral] Insert Condicional..
É 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..
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..
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..
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