lista exercicios tii pbd 2011-12-14 oracle

3
MINISTÉRIO DA EDUCAÇÃO INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE GOIÁS CAMPUS DE JATAÍ COORDENAÇÃO DOS CURSOS DE INFORMÁTICA TÉCNICO INTEGRADO EM INFORMÁTICA PROGRAMAÇÃO PARA BANCO DE DADOS CRIANDO BANCO DE DADOS: CREATE TABLE cidade (cidcod number not null, cidnome varchar2(20), ciduf char(2), primary key (cidcod)); CREATE TABLE cliente (clicod number not null, clinome varchar2(30), clicpf varchar2(14), clicodcid number, primary key (clicod)); CREATE TABLE departamento (depcod number not null, depnome varchar2(20), primary key (depcod)); CREATE TABLE funcionario (funcod number not null, funnome varchar2(30), funcoddep number, primary key (funcod)); CREATE TABLE venda (vendcod number not null, vendcodfunc number, vendcodcli number, venddata date, vendtotal number(15,2), primary key (vendcod)); CREATE TABLE produto (prodcod number not null, proddesc varchar2(20), prodquant number, prodvalor number(15,2), primary key (prodcod)); CREATE TABLE item (itemcodvenda number not null, itemcodprod number not null, itemquant number, itemvalor number(15,2), primary key (itemcodvenda, itemcodprod)); GATILHOS CRIE UM GATILHO QUE AJUSTA O PREÇO DO PRODUTO VENDIDO, NÃO PERMITINDO QUE SEJA VENDIDO POR VALOR MENOR DO CADASTRO + 15%: CREATE OR REPLACE TRIGGER trig_ajusta_preco_venda BEFORE insert OR update ON item FOR EACH ROW DECLARE varprecocompra produto.prodvalor%Type; BEGIN SELECT prodvalor INTO varprecocompra FROM produto WHERE prodcod = :new.itemcodprod; IF :new.itemvalor < (varprecocompra * 1.15) THEN :new.itemvalor := (varprecocompra * 1.15); END IF; END; DISPARANDO O GATILHO: INSERT INTO item VALUES(1, 1, 5, 2.5);

Upload: fabrizio171195

Post on 12-Jan-2016

3 views

Category:

Documents


0 download

DESCRIPTION

as

TRANSCRIPT

Page 1: Lista Exercicios Tii Pbd 2011-12-14 Oracle

MINISTÉRIO DA EDUCAÇÃO INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE GOIÁS

CAMPUS DE JATAÍ COORDENAÇÃO DOS CURSOS DE INFORMÁTICA

TÉCNICO INTEGRADO EM INFORMÁTICA

PROGRAMAÇÃO PARA BANCO DE DADOS

CRIANDO BANCO DE DADOS:

CREATE TABLE cidade

(cidcod number not null, cidnome varchar2(20), ciduf char(2), primary key (cidcod));

CREATE TABLE cliente

(clicod number not null, clinome varchar2(30), clicpf varchar2(14), clicodcid number,

primary key (clicod));

CREATE TABLE departamento

(depcod number not null, depnome varchar2(20), primary key (depcod));

CREATE TABLE funcionario

(funcod number not null, funnome varchar2(30), funcoddep number, primary key (funcod));

CREATE TABLE venda

(vendcod number not null, vendcodfunc number, vendcodcli number, venddata date,

vendtotal number(15,2), primary key (vendcod));

CREATE TABLE produto

(prodcod number not null, proddesc varchar2(20), prodquant number, prodvalor

number(15,2), primary key (prodcod));

CREATE TABLE item

(itemcodvenda number not null, itemcodprod number not null, itemquant number, itemvalor

number(15,2), primary key (itemcodvenda, itemcodprod));

GATILHOS

CRIE UM GATILHO QUE AJUSTA O PREÇO DO PRODUTO VENDIDO, NÃO PERMITINDO QUE SEJA VENDIDO POR VALOR MENOR DO CADASTRO + 15%:

CREATE OR REPLACE TRIGGER trig_ajusta_preco_venda BEFORE insert OR update ON item FOR EACH ROW DECLARE

varprecocompra produto.prodvalor%Type; BEGIN

SELECT prodvalor INTO varprecocompra FROM produto WHERE prodcod = :new.itemcodprod; IF :new.itemvalor < (varprecocompra * 1.15) THEN

:new.itemvalor := (varprecocompra * 1.15); END IF;

END; DISPARANDO O GATILHO:

INSERT INTO item VALUES(1, 1, 5, 2.5);

Page 2: Lista Exercicios Tii Pbd 2011-12-14 Oracle

MINISTÉRIO DA EDUCAÇÃO INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE GOIÁS

CAMPUS DE JATAÍ COORDENAÇÃO DOS CURSOS DE INFORMÁTICA

TÉCNICO INTEGRADO EM INFORMÁTICA

PROGRAMAÇÃO PARA BANCO DE DADOS

CRIE UM GATILHO QUE VERIFIQUE SE A QUANTIDADE DO PRODUTO A SER VENDIDA EXISTE NO ESTOQUE. SE EXISTIR ATUALIZE O ESTOQUE, SENÃO MOSTRE UAM MENSAGEM E CANCELE A OPERAÇÃO:

CREATE OR REPLACE TRIGGER tr_verifica_qtd_produto BEFORE insert ON item FOR EACH ROW DECLARE

varqtdestoque produto.prodquant%type; varnomeprod produto.proddesc%type;

BEGIN SELECT produto.prodquant, produto.proddesc INTO varqtdestoque,

varnomeprod FROM produto WHERE produto.prodcod = :new.itemcodprod;

IF varqtdestoque >= :new.itemquant THEN

UPDATE produto SET produto.prodquant = produto.prodquant -:new.itemquant WHERE produto.prodcod = :new.itemcodprod;

ELSE RAISE_APPLICATION_ERROR(-20000, ' O Saldo Do Produto ' || varnomeprod || ' É de: ' || TO_CHAR(varqtdestoque) || ' Não Atendendo O Solicitado.' );

END IF; END;

CRIE UM GATILHO QUE ATUALIZE O ESTOQUE DO PRODUTO, QUANDO FOR EXCLUIR UM REGISTRO DA TABELA “ITEM”:

CREATE OR REPLACE TRIGGER "GATILHO_EXCLUI_ITEM" BEFORE delete ON item FOR EACH ROW BEGIN

UPDATE produto SET produto.prodquant = produto.prodquant + :OLD.itemquant WHERE produto.prodcod = :OLD.itemcodprod;

END;

CRIE UM GATILHO QUE ANTES DE EXCLUIR UM UMA VENDA, EXCLUA TODOS SEUS ITENS:

CREATE OR REPLACE TRIGGER "GATILHO_EXCLUI_ITEM" BEFORE delete ON venda FOR EACH ROW BEGIN

DELETE FROM item WHERE itemcodvenda= :OLD.vencod; END;

CRIE UM GATILHO QUE ANTES DE INSERIR UM CLIENTE, VERIFIQUE SE O CÓDIGO DA CIDADE ONDE MORA EXISTE:

Page 3: Lista Exercicios Tii Pbd 2011-12-14 Oracle

MINISTÉRIO DA EDUCAÇÃO INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE GOIÁS

CAMPUS DE JATAÍ COORDENAÇÃO DOS CURSOS DE INFORMÁTICA

TÉCNICO INTEGRADO EM INFORMÁTICA

PROGRAMAÇÃO PARA BANCO DE DADOS

CREATE OR REPLACE TRIGGER insere_cliente BEFORE insert ON cliente FOR EACH ROW DECLARE varcidade number; BEGIN SELECT count(cidcod) INTO varcidade FROM cidade WHERE cidcod = :new.clicodcid; IF varcidade = 0 THEN RAISE_APPLICATION_ERROR(-20000, ' Código da cidade inválido!'); END IF;

END;

EXERCÍCIOS: 1. Crie um gatilho para que antes de EXCLUIR uma venda, exclua todos os registros dos itens

desta venda.

2. Crie um gatilho para que antes de EXCLUIR um registro na tabela item, atualize o valor total

da venda e o estoque do produto vendido.

3. Crie um gatilho para que antes de INSERIR um registro na tabela item, atualize o valor total

da venda e o estoque do produto vendido.