Ir ao conteúdo
  • Cadastre-se

PostgreSQL Procesimentos armazenados e Triggers


Posts recomendados

Alguém pode me ajudar? Sou iniciante e n sei o que tem de errado no meu código...

 

SGBD: PostgreSQL

Exercicío: Crie uma função de gatilho que, ao inserir um registro na tabela “venda”, valide se o funcionário e o cliente estão ativos. Caso um ou os dois estiverem inativos deve-se lançar uma mensagem de exceção customizada.

 

Tabelas: 

CREATE TABLE cliente (
    id SERIAL PRIMARY KEY NOT NULL,
    id_cidade INT,
    nome VARCHAR(50),
    status BOOLEAN

);

CREATE TABLE vendedor (
    id SERIAL PRIMARY KEY,
    id_cidade INT,
    nome VARCHAR(50),
    salario_fixo DECIMAL(8,2),
    status BOOLEAN
);

CREATE TABLE venda (
    id SERIAL PRIMARY KEY NOT NULL,
    id_cliente INT,
    id_funcionario INT,
    data_venda TIMESTAMP,
    valor_total DECIMAL(8,2),
    CONSTRAINT fk_venda_cliente FOREIGN KEY (id_cliente) REFERENCES cliente (id),
    CONSTRAINT fk_venda_funcionario FOREIGN KEY (id_funcionario) REFERENCES vendedor (id)
);

 

Meu código:

CREATE FUNCTION inserir_venda ()
RETURNS TRIGGER AS
$$
BEGIN
	SELECT v.id_cliente, v.id_funcionario FROM venda v INNER JOIN cliente c ON v.id_cliente = c.id
	INNER JOIN vendedor f ON v.id_funcionario = f.id WHERE v.id_cliente = NEW.id AND v.id_funcionario = NEW.id; 
	IF (c.status = 'false') THEN
		RAISE EXCEPTION 'Não é possivel realizar esta ação, pois o cliente está inativo!';
	END IF;
	IF (f.status = 'false') THEN
		RAISE EXCEPTION 'Não é possivel realizar esta ação, pois o funcionario está inativo!';
	END IF;
	IF (c.status = 'false' AND f.status = 'false') THEN
		RAISE EXCEPTION 'Não é possivel realizar esta ação, pois o cliente e o funcionario estão inativos!';
	END IF;
	RETURN NEW;
END;
$$
LANGUAGE plpgsql;

CREATE TRIGGER triger_inserir_venda BEFORE INSERT ON venda
FOR EACH ROW EXECUTE PROCEDURE inserir_venda();

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...