VIEW's: -- construtora_consultar CREATE OR REPLACE FORCE VIEW "G101IF685EC_EQ02"."CONTRUTORA_CONSULTAR" ("CONCCNPJ", "CONCNOMEFANTASIA", "CONCRAZAOSOCIAL", "CONCENDERECO") AS Select "CONCCNPJ","CONCNOMEFANTASIA","CONCRAZAOSOCIAL","CONCENDERECO" from Construtora; -- nome_funcionarios CREATE OR REPLACE FORCE VIEW "G101IF685EC_EQ02"."NOME_FUNCIONARIOS" ("FUNCNOME") AS select funcionarios.funcnome from funcionarios; -- todos_funcionarios CREATE OR REPLACE FORCE VIEW "G101IF685EC_EQ02"."TODOS_FUNCIONARIOS" ("FUNCCPF", "FUNCCARGO", "FUNCSETORDELOCACAO", "FUNCCARGAHORARIA", "CONCCNPJ", "FUNCNOME", "FUNCCPFCHEFE") AS select "FUNCCPF","FUNCCARGO","FUNCSETORDELOCACAO","FUNCCARGAHORARIA","CONCCNPJ","FUNCNOME","FUNCCPFCHEFE" from funcionarios; PACKAGE: -- pacote_construtora create or replace Package Pacote_Construtora IS PROCEDURE construtora_alterar (cnpj construtora.conccnpj% TYPE, nome_fantasia construtora.concnomefantasia% TYPE , razao_social construtora.concrazaosocial% TYPE , endereco construtora.concendereco% TYPE); PROCEDURE construtora_consultar ( parcnpj construtora.conccnpj% TYPE); PROCEDURE construtora_excluir (cnpj construtora.conccnpj% TYPE); PROCEDURE construtora_incluir (cnpj construtora.conccnpj% TYPE, nome_fantasia construtora.concnomefantasia% TYPE, razao_social construtora.concrazaosocial% TYPE, endereco construtora.concendereco% TYPE); End Pacote_construtora; -- pacote_construtora body create or replace Package Body Pacote_Construtora As PROCEDURE construtora_alterar (cnpj construtora.conccnpj% TYPE, nome_fantasia construtora.concnomefantasia% TYPE , razao_social construtora.concrazaosocial% TYPE , endereco construtora.concendereco% TYPE)IS BEGIN UPDATE construtora SET concnomefantasia = nome_fantasia, concrazaosocial = razao_social, concendereco = endereco WHERE conccnpj = cnpj; END construtora_alterar; PROCEDURE construtora_consultar ( parcnpj construtora.conccnpj% TYPE)IS CURSOR curs IS SELECT conccnpj,concnomefantasia, concrazaosocial, concendereco FROM construtora WHERE conccnpj = parcnpj; cnpj construtora.conccnpj%type; nf construtora.concnomefantasia%type; rs construtora.concrazaosocial%type; endereco construtora.concendereco%type; BEGIN open curs; loop fetch curs INTO cnpj, nf, rs, endereco; exit when curs%notfound; dbms_output.put_line (cnpj ||' '|| nf ||' '|| rs ||' '|| endereco); end loop; CLOSE curs; END construtora_consultar; PROCEDURE construtora_excluir (cnpj construtora.conccnpj% TYPE)IS BEGIN DELETE FROM Construtora WHERE conccnpj = cnpj; END construtora_excluir; PROCEDURE construtora_incluir (cnpj construtora.conccnpj% TYPE, nome_fantasia construtora.concnomefantasia% TYPE, razao_social construtora.concrazaosocial% TYPE, endereco construtora.concendereco% TYPE)IS BEGIN INSERT INTO construtora VALUES (cnpj, nome_fantasia, razao_social, endereco ); END construtora_incluir; End Pacote_Construtora; PROCEDURE's: -- diferenca_estoqueatualmin create or replace PROCEDURE diferenca_estoquematualmin (sequencial IN Material.matcSequencial%TYPE) IS CURSOR pesq_material IS SELECT matnEstoqueAtual FROM Material WHERE matcSequencial = sequencial; CURSOR pesq_estoque IS SELECT estnEstoqueMin FROM Estoque WHERE MATCSEQUENCIAL = sequencial; Atual Material.matnEstoqueAtual%TYPE; Minimo Estoque.estnEstoqueMin%TYPE; Saida1 VARCHAR2 (50) default 'Estoque Baixo.'; Saida2 VARCHAR2 (50) default 'Estoque normal.'; BEGIN OPEN pesq_material; OPEN pesq_estoque; FETCH pesq_material INTO Atual; FETCH pesq_estoque INTO Minimo; IF Atual - Minimo < 50 THEN dbms_output.put_line(Saida1); ELSE dbms_output.put_line(Saida2); END IF; CLOSE pesq_material; CLOSE pesq_estoque; END; -- funcupdt_excecao create or replace PROCEDURE funcUpdt_excecao (cnpj_construtora construtora.conccnpj%TYPE) IS cpf_funcionario funcionarios.funccpf%TYPE; BEGIN SELECT func.funccpf INTO cpf_funcionario FROM funcionarios func WHERE func.funccargo Like 'Gerente' and func.conccnpj = cnpj_construtora; EXCEPTION WHEN NO_DATA_FOUND THEN dbms_output.put_line ('Nao foi encontrado nenhum gerente nessa construtora.'); WHEN OTHERS THEN dbms_output.put_line ('O gerente ja foi definido na cosntrutora tem o seguinte cpf: ' || cpf_funcionario); END funcUpdt_excecao; -- imprimeendereco create or replace PROCEDURE imprimeEndereco ( pesquisaCnpj fornecedores.forccnpj% TYPE)IS CURSOR cursEndereco IS SELECT forccnpj,forcnomefantasia, forcrazaosocial, forcendereco FROM fornecedores WHERE forccnpj = pesquisaCnpj; cnpj fornecedores.forccnpj %type; nf fornecedores.forcnomefantasia%type; rs fornecedores.forcrazaosocial%type; endereco fornecedores.forcendereco%type; BEGIN open cursEndereco; loop fetch cursEndereco INTO cnpj, nf, rs, endereco; exit when cursEndereco%notfound; dbms_output.put_line (nf ||' '|| endereco); end loop; CLOSE cursEndereco; END imprimeEndereco; -- inserir_por_parametros create or replace PROCEDURE inserir_por_parametros ( cnpj construtora.conccnpj% TYPE, nome_fantasia construtora.concnomefantasia% TYPE, razao_social construtora.concrazaosocial% TYPE, endereco construtora.concendereco% TYPE)IS begin insert into construtora VALUES (cnpj,nome_fantasia,razao_social, endereco); end inserir_por_parametros; -- retorna_linha create or replace PROCEDURE retorna_linha ( parcpf funcionarios.funccpf% TYPE)IS CURSOR curs IS SELECT funccpf, funccargahoraria, funccargo, funccpfchefe, funcnome, funcsetordelocacao, conccnpj FROM funcionarios WHERE funccpf = parcpf; CPF funcionarios.funcCPF%type; ch funcionarios.funccargahoraria%type; cpfchefe funcionarios.funccpfchefe%type; cargo funcionarios.funccargo%type; nome funcionarios.funcnome%type; sl funcionarios.funcsetordelocacao%type; concnpj funcionarios.conccnpj%type; BEGIN open curs; loop fetch curs INTO CPF, ch, cargo,cpfchefe, nome, sl, concnpj; exit when curs%notfound; dbms_output.put_line (CPF ||' '|| ch ||' '|| cargo ||' '|| cpfchefe ||' '|| nome ||' '|| sl ||' '|| concnpj); end loop; CLOSE curs; END retorna_linha; FUNCTION's: -- funcao_retorna_tipo create or replace FUNCTION funcao_retorna_tipo (cpf funcionarios.funcCPF%TYPE) RETURN VARCHAR2 IS cargo funcionarios.funcCargo%TYPE; BEGIN Select f.funcCargo into Cargo from funcionarios f where f.funcCpf like cpf; return cargo; end funcao_retorna_tipo; -- retorna_quantidade_restante create or replace FUNCTION retorna_quantidade_restante ( sequencial material.MATCSEQUENCIAL% TYPE)RETURN NUMBER IS estoque_atual material.matnestoqueatual% TYPE; estoque_min estoque.estnestoquemin% TYPE; valor_restante number(5); Saida1 VARCHAR2 (50) default 'Estoque baixo.'; Saida2 VARCHAR2 (50) default 'Estoque normal.'; Saida3 VARCHAR2 (50) default 'Trocar agora.'; Saida4 VARCHAR2 (50) default 'Ja passou da hora de trocar, estoque abaixo do minimo.'; BEGIN SELECT MATNESTOQUEATUAL INTO estoque_atual FROM material WHERE MATCSEQUENCIAL = sequencial; SELECT ESTNESTOQUEMIN INTO estoque_min FROM estoque WHERE MATCSEQUENCIAL = sequencial; valor_restante := estoque_atual - estoque_min; IF estoque_atual > estoque_min THEN IF valor_restante < 50 THEN dbms_output.put_line(saida1); ELSE dbms_output.put_line(saida2); END IF; ELSIF estoque_atual = estoque_min THEN dbms_output.put_line(saida3); ELSE dbms_output.put_line(saida4); END IF; RETURN valor_restante; END; TRIGGERS: -- gera_logs_construtora create or replace trigger gera_logs_construtora BEFORE INSERT OR UPDATE OR DELETE ON Construtora REFERENCING OLD AS v NEW AS n FOR EACH ROW BEGIN IF inserting THEN INSERT INTO logs_const rutora VALUES (sysdate, user, 'Foi inserido.', :v.concnomefantasia, :v.concrazaosocial, :v.concendereco, :n.concnomefantasia, :n.concrazaosocial, :n.concendereco); ELSIF deleting THEN INSERT INTO logs_construtora VALUES (sysdate, user, 'Foi deletado.', :v.concnomefantasia, :v.concrazaosocial, :v.concendereco, :n.concnomefantasia, :n.concrazaosocial, :n.concendereco); ELSE INSERT INTO logs_construtora VALUES (sysdate, user, 'Foi alterado.', :v.concnomefantasia, :v.concrazaosocial, :v.concendereco, :n.concnomefantasia, :n.concrazaosocial, :n.concendereco); END IF; END; -- notificacao_construtora create or replace TRIGGER notificacao_construtora AFTER UPDATE ON CONSTRUTORA BEGIN DBMS_OUTPUT.PUT_LINE('Atualização feita com sucesso!'); END;