Skip to content

Instantly share code, notes, and snippets.

@aalvesjr
Created October 14, 2011 14:32
Show Gist options
  • Select an option

  • Save aalvesjr/1287285 to your computer and use it in GitHub Desktop.

Select an option

Save aalvesjr/1287285 to your computer and use it in GitHub Desktop.
Ex.Postgres
CREATE TABLE administestabelec (
codestabelec integer NOT NULL,
codadminist integer NOT NULL,
percdescto numeric DEFAULT 0 NOT NULL,
valdescto numeric DEFAULT 0 NOT NULL,
taxaenvio numeric DEFAULT 0 NOT NULL,
diaenvio integer DEFAULT 0 NOT NULL,
usuario character varying(20),
datalog date
);
CREATE TABLE administradora (
codadminist integer NOT NULL,
nome character varying(40) NOT NULL,
cnpj character varying(20),
fone character varying(20),
endereco character varying(40),
bairro character varying(30),
cep character varying(9),
uf character(2),
codcidade integer,
observacao character varying(500),
usuario character varying(20),
datalog date,
numero character varying(20),
complemento character varying(20),
codconta integer
);
CREATE TRIGGER tgr_produtoestab_beforedelete
BEFORE DELETE ON produtoestab
FOR EACH ROW
EXECUTE PROCEDURE stpr_produtoestab_beforedelete();
CREATE FUNCTION stpr_produtoestab_beforedelete() RETURNS "trigger"
AS $$
DECLARE sldatual numeric;
DECLARE rowEstabelecimento estabelecimento%ROWTYPE;
DECLARE rowProduto produto%ROWTYPE;
BEGIN
sldatual = old.sldinicio + old.sldentrada - old.sldsaida;
IF sldatual != 0 THEN
SELECT * INTO rowProduto FROM produto WHERE codproduto = old.codproduto;
SELECT * INTO rowEstabelecimento FROM estabelecimento WHERE codestabelec = old.codestabelec;
RAISE EXCEPTION 'Saldo do produto <b>%</b> (%) no estabelecimento <b>%</b> (%) &eacute; de <b>%</b> unidades.<br>Para exclu&iacute;r o produto, seu estoque atual deve ser <b>0,00</b> (zero) unidades.', old.codproduto, rowProduto.descricaofiscal, old.codestabelec, rowEstabelecimento.nome, formatar(sldatual,2);
RETURN NULL;
END IF;
RETURN old;
END;
$$
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment