Baixe o app para aproveitar ainda mais
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;
Compartilhar