Buscar

Trabalho_Banco_II_G1_2019_Ulbra_2

Prévia do material em texto

UNIVERSIDADE LUTERANA DO BRASIL 
Ciência da Computação 
Banco de Dados II 
 
ATIVIDADE AVALIATIVA G1 
 
Com base no Diagrama ER abaixo relacionado, responda os exercícios que seguem 
 
Tabela Atributo Descrição do Atributo 
tbmarca Pkcodmarca Armazena o código da marca 
Nome Armazena o nome da marca 
tbequipamento 
pkcodequi Código do equipamento 
�codmarca Código da marca do equipamento 
descricaoequi Armazena a descrição do equipamento 
�pocontadorequi Define o �po do contador 
1- hora 
2- km 
3- litros 
Contador Armazena o total do contador do equipamento (somente valores 
maiores ou iguais a zero) 
Quan�dadelanc Armazena a quan�dade de ocorrências de lançamentos 
vinculados ao equipamento (maiores ou iguais a zero) 
capacidadetanque Capacidade máxima de armazenamento do tanque do 
equipamento (somente valores maiores ou iguais a 0) 
tblancamento 
Pkcodlanc Código do lançamento 
Fkcodequi Equipamento que possui lançamento 
Datalanc Data do lançamento 
Descricaolanc Descrição do lançamento 
Quan�dadelanc Quan�dade lançada (somente valores maiores do que zero) 
 
1) Crie regras que não permitam ser cadastrados valores diferentes dos especificados nos 
campos: 
● tbequipamento.�pocontadorequi 
● tbequipamento.contador 
 
alter table TBEQUIPAMENTO add constraint verificaTipo CHECK (�pocontadorequi>0 and 
�pocontadorequi<4); 
 
alter table TBEQUIPAMENTO add constraint verificaTamanho CHECK (contador>=0); 
UNIVERSIDADE LUTERANA DO BRASIL 
Ciência da Computação 
Banco de Dados II 
 
 
2) Crie uma função que passado o código do equipamento retorne o �po de contador do 
equipamento específico. Caso o equipamento não seja encontrado a função deverá retornar 0 
(zero) 
create or replace func�on encontraEqui(cod in TBEQUIPAMENTO.PKCODEQUI%TYPE) 
return integer 
is 
 �po TBEQUIPAMENTO.TIPOCONTADOREQUI%TYPE; 
begin 
 select e.TIPOCONTADOREQUI into �po from TBEQUIPAMENTO e where e.pkcodequi=cod; 
 if �po is null then 
 �po:=0; 
 end if; 
 return(�po); 
end encontraEqui; 
3) Crie um procedimento que receba como parâmetro apenas a descrição do equipamento, o 
código da marca, o �po de contador, e a capacidade máxima de armazenamento do tanque 
para realizar o cadastro do equipamento. O procedimento deverá verificar se o código da 
marca existe. Se sim, deverá cadastrar o equipamento mostrando a mensagem em modo 
console “Equipamento cadastrado” seguido dos dados do equipamento sendo apresentados 
em tela, inclusive o nome da marca. Quando inserir o equipamento, deverá ser gerando 
automa�camente o código do equipamento, e inserindo o contador e quan�dade de 
lançamentos como sendo valor 0 (zero) . Caso o �po de contador for diferente de 3 a 
capacidade máxima de armazenamento do tanque deve ser setada para zero. Caso não exista a 
marca, o procedimento deverá imprimir em modo console “Marca não encontrada” e não 
cadastrar o equipamento. 
create or replace procedure cadEqui(descr in TBEQUIPAMENTO.DESCRICAOEQUI%TYPE, codm 
in TBEQUIPAMENTO.FKCODMARCA%TYPE, 
�po in TBEQUIPAMENTO.TIPOCONTADOREQUI%TYPE, cap in 
TBEQUIPAMENTO.CAPACIDADETANQUE%TYPE) 
is 
 marcaexi TBMARCA.PKCODMARCA%TYPE; 
 proxcod integer; 
 capIns TBEQUIPAMENTO.CAPACIDADETANQUE%TYPE; 
 nomem TBMARCA.NOME%type; 
begin 
 select m.pkcodmarca, m.NOME into marcaexi, nomem from tbmarca m where m.pkcodmarca 
= codm; 
 if marcaexi is not null then 
 select max(e.pkcodequi) into proxcod from tbequipamento e; 
 if proxcod is null then 
 proxcod:=0; 
UNIVERSIDADE LUTERANA DO BRASIL 
Ciência da Computação 
Banco de Dados II 
 
 end if; 
 proxcod:= proxcod + 1; 
 capIns:= cap; 
 if �po != 3 then 
 capIns:= 0; 
 end if; 
 insert into tbequipamento(pkcodequi,�codmarca ,descricaoequi,�pocontadorequi 
,contador, quan�dadelanc,capacidadetanque) 
 values(proxcod, codm, descr, �po, 0, 0, capIns); 
 dbms_output.put_line('O equipamento foi cadastrado'); 
 dbms_output.put_line('O Pkcodequi: ' || proxcod); 
 dbms_output.put_line('O Fkcodmarca: ' || codm); 
 dbms_output.put_line('Nome da marca: ' || nomem); 
 dbms_output.put_line('O Descricaoequi: ' || descr); 
 dbms_output.put_line('O cotador: 0'); 
 dbms_output.put_line('O quan�dadelanc: 0'); 
 dbms_output.put_line('O capacidadetanque: ' || capIns); 
 end if; 
 excep�on 
 when others then 
 dbms_output.put_line('Marca nao encontrada'); 
end cadEqui; 
 
 
 
 
 
 
 
 
 
 
 
 
 
UNIVERSIDADE LUTERANA DO BRASIL 
Ciência da Computação 
Banco de Dados II 
 
4) Crie um procedimento possua como parâmetro o código do equipamento, a data de 
lançamento, a descrição do lançamento e a quan�dade que será lançado. O procedimento 
deverá realizar os seguintes processos: 
● Chamar a função criada exercício 2 para verificar se o equipamento existe. Caso não 
exista mande uma mensagem em modo console “Veículo informado não cadastrado” e 
não realizar o cadastro 
● Buscar o �po de contador do equipamento 
● Com base no �po de contador validar a quan�dade. 
o Caso o �po de contador for 1 a quan�dade informada como parâmetro não 
poderá ser super 24, caso for mande uma informação em tela “Quan�dade 
informada superior a 24 horas”, e não realizar o cadastro do lançamento 
o Caso o �po de contador for igual a 3 o procedimento deverá verificar se a 
quan�dade informada não seja superior a quan�dade máxima de 
armazenamento do tanque do equipamento informado como parâmetro. Caso 
seja superior o sistema deverá mostrar em modo console a informação 
“Quan�dade informada é superior a capacidade do tanque”, e não realizar o 
cadastro do lançamento 
● Se não encontrar problemas de validação já apresentados anteriormente, deverá 
realizar a inserção de um novo registro do lançamento gerando automa�camente o 
código de lançamento 
● Assim que registrar um novo lançamento da tabela tblancamento, deverá atualizar os 
seguintes campos da tabela tbequipamento 
o Contador => incrementar a este atributo o valor an�go mais o novo valor 
informado no parâmetro de quan�dade 
o Quan�dadelanc => incrementar “ mais um ” no conteúdo deste campo para 
registrar que ocorreu mais um lançamento relacionado ao equipamento 
 
create or replace procedure cadLanc(codequi in TBLANCAMENTO.FKCODEQUI%TYPE,datlanc in 
TBLANCAMENTO.DATALANC%TYPE,descrlanc in TBLANCAMENTO.DESCRICAOLANC%TYPE,quant in 
TBLANCAMENTO.QUANTIDADE%TYPE) 
is 
existe TBEQUIPAMENTO.PKCODEQUI%TYPE; 
�pocon TBEQUIPAMENTO.TIPOCONTADOREQUI%TYPE; 
captanq TBEQUIPAMENTO.CAPACIDADETANQUE%TYPE; 
proxcod TBLANCAMENTO.PKCODLANC%TYPE; 
flag integer; 
begin 
 flag:=0; 
 select ENCONTRAEQUI(codequi) into existe from dual; 
 if existe != 0 then 
UNIVERSIDADE LUTERANA DO BRASIL 
Ciência da Computação 
Banco de Dados II 
 
 select e.TIPOCONTADOREQUI,e.CAPACIDADETANQUE into �pocon,captanq from 
TBEQUIPAMENTO e where e.PKCODEQUI=codequi; 
 if �pocon = 1 then 
 if quant > 24 then 
 dbms_output.put_line('Quan�dade informada superior a 24 horas'); 
 flag:=1; 
 end if; 
 elsif �pocon = 3 then 
 if quant > captanq then 
 dbms_output.put_line('Quan�dade informada é superior a capacidade do tanque'); 
 flag:=1; 
 end if; 
 end if; 
 
 if flag = 0 then 
 select max(pkcodlanc) into proxcod from TBLANCAMENTO; 
 if proxcod is null then 
 proxcod:=0; 
 end if; 
 proxcod:=proxcod+1; 
 insert into TBLANCAMENTO (pkcodlanc,�codequi,datalanc,descricaolanc,quan�dade) 
values (proxcod,codequi,datlanc,descrlanc,quant); 
 update TBEQUIPAMENTO e set 
contador=contador+quant,quan�dadelanc=quan�dadelanc+1 where e.PKCODEQUI=codequi; 
 end if; 
 else 
 dbms_output.put_line('Veículo informado não cadastrado'); 
 end if; 
end cadLanc;

Continue navegando