PROGRAMAÇÃO EM BANCO DE DADOS POSTGRESQL

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (3)  (0)

Neste artigo, gostaria de mostrar uma coisa simples, mas que as pessoas que estao começando agora na carreira tem muitas dificuldades para aprender, que é a programação em banco de dados. No artigo falo um pouco de RULE, FUNCTION e TRIGGER dando alguns exemplos faceis mas de grande ajuda. O banco que utilizei para o aretigo é o postgresql 8.2

Ola a todos. O intuito deste artigo partiu de uma necessidade minha em relação a um sistema de leitura de malotes entre suas filiais. Sei que o que vou mostrar é uma coisa primaria para os desenvolvedores e DBA´s, mas tenho notado que a maioria das pessoas que estão iniciando a vida de desenvolvedor tem encontrado muitas dificuldades nesse ponto.

Vou mostrar aqui algumas das muitas facilidades que a utilização de FUNCTION, RULE e TRIGGER podem nos oferecer em nosso dia a dia.

Suponhamos que temos uma tabela principal (vamos chamar de tbprincipal), que vai receber dados de uma leitura de um malote ou produto. E teremos mais uma tabela (vamos chamar de tbhistorico), que vai receber as demais passagens desse produto ate seu destino final, como mostra figura 1 logo abaixo:

 

Os campos de ambas as tabelas consistem em:

·         codtbprincipal e codtbhistorico ( chave primaria).

·         codtbnumlote (lote em que a leitura é feita).

·         codtbproduto (código do produto).

·         numcodbarras ( código de barras).

·         numcodvoid   (numero do void).

·         datarem          (data da leitura).

Foi criada uma unique na tabela principal, que vai determinar que quando a leitura for feita, o banco não deixar incluir na tabela principal um registro que tenha mais que uma passagem, assim incluindo então na tabela de histórico.

RULE

Nosso próximo passo vai ser criar uma RULE (regra), as regras não fazem parte do SQL padrão, mas são implementadas pelo postgresql e permitem especificar uma ação alternativa que é executada em: SELECT, INSERT, UPDATE e DELETE. Sua sintaxe é:

CREATE RULE nome_da_rule AS ON evento(INSERT,UPDATE,SELECT,DELET)
TO nome_da_tabela [WHERE (se houver condição)]
DO [INSTEAD (faça ao invés)] [ ação |
(ação)|
NOTHING
];

A primeira RULE que vou criar vai ser para a tabela principal, pois se tentar inserir um registro nela que já exista, então o banco vai retornar uma mensagem de erro de violação de unique. O trabalho ta rule vai ser exatamente não deixar acontecer o erro e inserir este  dado em minha tabela de histórico como mostra a figura 2.

  

 
A segunda RULE vai ser criada para a tabela de histórico, pois assim que o evento INSERT for acionado nesta tabela, vou dar um UPDATE em minha tabela principal, atualizando o numero do lote (para simplificar as futuras consultas no sistema) como mostra a figura 3.

 FUNCTION

Como  a tradução já diz (função),  é armazenada dentro do banco de dados e executa comandos assim que é chamada (por um SELECT ou uma TRIGGER). Essa FUNCTION que vou criar, vai ser chamada por uma TRIGGER e vai verificar se o produto que estou incluído pertence ao grupo dos que tem um void (que é uma numeração do código de barras que consta o destino no produto, e nessa FUNCTION defino eles como 18,21 e 55), se sim, vou inclui no campo numcodvoid se não, vou incluir ‘0000000000’ (zeros) no campo como mostra figura 4.

 

TRIGGER

Uma TRIGGER (gatilho) fica vinculada a uma tabela e sempre que ocorre uma ação correspondente (INSERT, DELETE ou UPDATE), executa uma função (FUNCTION). Sua sintaxe é:

CREATE OR REPLACE TRIGGER nome_da_trigger

{BEFORE | AFTER} {EVENTO [OR…] }

ON tabela [ FOR [ EACH ] { ROW | STATEMENT } ]

EXECUTE PROCEDURE nome_da_função ( argumentos )

Nesse caso, minha TRIGGER foi criada para disparar ANTES do evento INSERT em minha tabela principal como mostra a figura 5.

Podemos inclusive criar mais uma TRIGGER para minha tabela de histórico, pois ela também tem o campo do void.

 

CONCLUSÃO: Para os desenvolvedores que estão começando agora, é muito importante conhecer (não precisa ser afundo) mas sim ter noções sobre programação em banco e não ter sempre a idéia que o banco é um “simples repositório de dados” e que podemos resolver tudo via código fonte.

As RULES, FUNCTIONS E TRIGGERS são muito úteis, pois seu sistema e o banco de dados ganham em desempenho alem de tudo ficar mais organizado e deixar seu código fonte limpo e de fácil manutenção.

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?