Ajuda Urgente!!!! Triggers!!!

29/11/2011

0

Ola pessoal, tenho que entregar um trabalho de Banco de Dados no postgresql de uma loja de informatica, o problema é que preciso de 2 trigger, uma de controle de estoque e outra pra atualizar o endereço do cliente, o problema é que sou iniciante e não faço nem ideia de como se faz a implementação, se alguem puder dar uma ajuda o banco de dados criado esta abaixo.

Fico no aguardo!!!

CREATE TABLE Funcionarios (
codfunc integer not null,
nome varchar(50) not null,
dataadmissao date not null,
cpf char(14) not null,
rg char(10) not null,
constraint pk_funcionarios primary key (codfunc)
);

CREATE TABLE Produtos (
codprod integer not null,
valor_venda numeric(10,2) not null,
valor_compra numeric(10,2) not null,
nome varchar(50) not null,
Qtd_Estoque integer,
constraint pk_produtos primary key (codprod)
);

CREATE TABLE Vendas (
codvenda integer not null,
data date not null,
Valor_Nota_Venda numeric(10,2) not null,
codcli integer not null,
codfunc integer not null,
constraint pk_Vendas primary key (codvenda),
FOREIGN KEY(codfunc) REFERENCES Funcionarios (codfunc)
);

CREATE TABLE Compra (
codcompra integer not null,
data date not null,
Valor_da_Nota numeric(10,2) not null,
cnpj char(14),
constraint pk_compra primary key (codcompra)
);

CREATE TABLE Fornecedores (
cnpj varchar(14) not null,
razaosocial char(50) not null,
inscriestadual integer not null,
email char(30) not null,
telefone char(25) not null,
codcid integer not null,
constraint pk_fornecedores primary key (cnpj)
);

CREATE TABLE Clientes (
codcli integer not null,
nome char(50) not null,
cpf char(14) not null,
rg char(10) not null,
telefone char(15) not null,
codcid integer,
constraint pk_clientes primary key (codcli)
);

CREATE TABLE Cidade (
estado char(2) not null,
cidade char(30) not null,
codcid integer not null,
constraint pk_cidade primary key (codcid)
);

CREATE TABLE itens (
qtd integer not null,
Valor_Venda numeric(10,2) not null,
codvenda integer not null,
codprod integer not null,
constraint pk_itens primary key(codvenda,codprod),
CONSTRAINT fk1_itens FOREIGN KEY (codvenda) REFERENCES vendas,
CONSTRAINT fk2_itens FOREIGN KEY (codprod) REFERENCES produtos
);

CREATE TABLE Itens_compra (
Preco_Compra numeric(10,2) not null,
Qtd_Itens integer not null,
codprod integer not null,
codcompra integer not null,
constraint pk_ItemCompra primary key (codprod, codcompra),
CONSTRAINT fk1_itens_compra FOREIGN KEY (codprod) REFERENCES produtos,
CONSTRAINT fk2_itens_compra FOREIGN KEY (codcompra) REFERENCES compra
);

alter table vendas
add constraint FK_clientes_codcli foreign key (codcli)
references clientes;
--ALTER TABLE Compra ADD FOREIGN KEY(cnpj) REFERENCES Fornecedores (cnpj)
alter table compra
add constraint FK_compra_fornecedores foreign key (cnpj)
references fornecedores;

--ALTER TABLE Fornecedores ADD FOREIGN KEY(codcid) REFERENCES Cidade (codcid)
alter table fornecedores
add constraint FK1_fornecedores_cidade foreign key (codcid)
references cidade;

--ALTER TABLE Clientes ADD FOREIGN KEY(codcid) REFERENCES Cidade (codcid)
alter table clientes
add constraint FK_ClientesCidades foreign key (codcid)
references cidade;

insert into Funcionarios values (1, Mateus, 11/10/2011, 04998767880, 7060504356);
insert into Funcionarios values (2, Ronaldo, 08/01/2011, 82747562109, 9872645098);

insert into Produtos values (175, 100, Memoria, 1, 10);
insert into Produtos values (300, 200, Placa Mae Asus, 2, 8);

insert into Cidade values (RS, Casca, 1);
insert into Cidade values (RS, Vanini, 2);

insert into clientes values (1, Lucas, 01298025060, 7081535721, 81482043, 2);
insert into clientes values (2, Alvadir, 02148492041, 5098738495, 5433479876, 1);

insert into Fornecedores values (93137199000121, TecMaster Soluc. Inf., 9010934050, tecmaster@hotmail.com, 5433476565, 1);
insert into Fornecedores values (94728294000109, SulComp., 4134837564, sulcomp@terra.com.br, 5433401212, 2);

insert into vendas values (1, 22/11/2011, 300, 1, 1);
insert into vendas values (2, 20/11/2011, 300, 2, 2);

insert into Compra values (1, 01/11/2011, 1000, 93137199000121);
insert into Compra values (2, 20/10/2011, 700, 93137199000121);

insert into itens (10, 300, 1, 2);
insert into itens (10, 300, 2, 2);

insert into itens_compra (1000, 3, 1, 1);
insert into itens_compra (700, 3, 2, 2);
----------------------------------------------------------

Desde ja agradeço!!
Lucas Martinelli

Lucas Martinelli

Responder

Posts

07/04/2012

Marcelo Barbosa


Parece que você procura por procedures (functions) não exatamente por triggers. O trigger é disparado por alguma manipulação dos dados (insert, update e delete).

Este código é para criar um trigger.

Mas para criar uma procedure você troca o tipo de retorno para o tipo desejado, geralmente um boolean com a confirmação da operação, pode passar parâmetros no create da função ex. [schema].[nomeTrigger](pessoa integer, cep character varying, bairro integer, logradouro character varying) e dentro do bloco você escreve linguagem procedural com o que deseja fazer.

Recomendo você trocar algumas colunas que estão com char por varchar,
ex. nome char(50)
O banco vai preencher com espaços em branco os caracteres à direita ficando algo como João da Silva e quando você for comparar nome = João da Silva não terá o retorno esperado.

Boa sorte com seu trabalho.

CREATE OR REPLACE FUNCTION [schema].[nomeTrigger]()
  RETURNS trigger AS

$BODY$	DECLARE
			--Você pode declarar algumas variaveis aqui
	BEGIN		

		IF (TG_OP = <Condição>) THEN -- a condição pode ser INSERT, UPDATE, DELETE
		
			--

		ELSE

			--

		END IF;
		RETURN NEW;
	END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION [schema].[nomeTrigger]()
  OWNER TO postgres;

Responder

07/04/2012

Marcelo Barbosa

Quote

Recomendo você trocar algumas colunas que estão com char por varchar,
ex. nome char(50)

O banco vai preencher com espaços em branco os caracteres à direita ficando algo como
João da Silva                           
e quando você for comparar
 nome = João da Silva 
não terá o retorno esperado.



Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar