Beruflich Dokumente
Kultur Dokumente
Firebird e Postgres
http://www.devmedia.com.br/articles/viewcomp.asp?comp=5625&hl=*oracle*
empresas que desenvolvem aplicativos para diversos bancos de dados passam por
uma dúvida sobre como tratar as regras de negócio: elas ficam na aplicação ou
devem ser escritas no banco de dados.
quando é optado por deixar as regras na aplicação, a vantagem está na
portabilidade, porque não será necessário reescrever estas regras em cada
linguagem que é disponibilizada pelos fornecedores de sgbd.
por outro lado quem opta por colocar tudo no banco de dados garante uma maior
integridade das informações, e normalmente tem algum ganho de desempenho por
deixar procedimentos pesados no lado do servidor do banco de dados.
neste artigo será abordada somente uma pequena parte deste assunto. o objetivo é
comentar algumas das diferenças existentes na criação de triggers nos seguintes
bancos de dados: sql server, oracle, firebird e postgres.
campo tipo
#idnotafiscal inteiro
idcliente inteiro
datavenda data
tabela 1. definição da tabela de notas fiscais
campo tipo
#idnotafiscal inteiro
#iditem inteiro
idproduto inteiro
preço unitário numérico
quantidade numérico
tabela 2. definição da tabela de itens da nota fiscal
-- exclui a trigger
drop trigger tr_in_item on item;
3. principais diferenças
1) recompilação da trigger
quando vamos compilar uma trigger o banco de dados deve excluir a versão
anterior caso ela já tenha sido compilada alguma vez.
para isto, no oracle e no postgres basta usar a declaração create or replace, já no
sql server é necessário verificar se já existe no dicionário um objeto com o mesmo
nome da trigger, e caso exista é explicitamente excluída a trigger com a instrução
abaixo:
o sql server também tem outra forma de atualizar uma trigger usando a instrução
alter trigger. neste exemplo a declaração da trigger começaria assim:
alter trigger tr_in_item
on item
after insert
4.2. firebird
select count(*)
from item
where idnota = :lnota
into :ltotalitens;
4.3. postgres
select into ltotalitens count(*)
from item
where idnota = lnota;
4.4. oracle
select count(*)
into ltotalitens
from item
where idnota = lnota;
5) mensagens
quando em uma trigger é necessário retornar alguma mensagem para a aplicação,
teremos formas diferentes nos sgbd
no sql server existe uma procedure que permite passarmos parâmetros para o
texto, no nosso exemplo o código da nota é substituído na mensagem na posição
onde temos a string “%d” que indica um parâmetro do tipo inteiro.
5.2 firebird
5.3 postgres
o postgres tem uma forma similar de tratar as mensagens ao sql server, tem o
comando raise exception que permite colocarmos parâmetros na mensagem.
5.4 oracle
-- exclui a trigger
drop trigger tr_in_item on item;
conclusões
neste artigo vimos diferenças básicas que devem ser tratadas quando pretendemos
usar triggers para colocarmos as regras de negócio da aplicação em diversos sgbd.
existem outras tantas diferenças que devem ser consideradas, a idéia do artigo foi
somente tentar mostrar que ao criarmos procedimentos e funções para colocarmos
as regras do negócio no banco de dados, iremos nos deparar com linguagens bem
diferentes e nos obrigando a termos fontes distintos, que sofrerão manutenção
independente.