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!!
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
Curtir tópico
+ 0
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 e quando você for comparar não terá o retorno esperado.
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
nome = João da Silva
Responder
Clique aqui para fazer login e interagir na Comunidade :)