A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Equipe de monitoria Aula prática 3.  Caso de estudo  Igualando situações  Cursor  Function  Procedure  Trigger  Package  Surpresa...

Apresentações semelhantes


Apresentação em tema: "Equipe de monitoria Aula prática 3.  Caso de estudo  Igualando situações  Cursor  Function  Procedure  Trigger  Package  Surpresa..."— Transcrição da apresentação:

1 Equipe de monitoria Aula prática 3

2  Caso de estudo  Igualando situações  Cursor  Function  Procedure  Trigger  Package  Surpresa...

3  Mesmo da aula passada, para quem não terminou de gerar o banco...  Pegar arquivo BD.zip em www.cin.ufpe.br/~rcm3/GDIwww.cin.ufpe.br/~rcm3/GDI  Descompactar arquivo: ▪ criacaoTabelas.SQL ▪ popularBD.SQL ▪ logico ▪ LOGICO.brM ▪ Modelo Logico - Aula Prática.jpg ▪ conceitual ▪ CONCEITUAL.brM ▪ Modelo Conceitual - Aula Pratica.jpg

4  Criar as tabelas  Executar script em criacaoTabelas.SQL  Popular base de dados  Executar script em popularBD.SQL Observação: apenas uma pessoa por equipe realize essas tarefas para evitar exceções.

5  SELECT * FROM tabs;  DESCRIBE nometabela ou DESC nometabela;  SELECT * FROM user_triggers;  SELECT * FROM user_procedures;  SELECT * FROM user_sequences;  SHOW errors;  SET serveroutput on

6 Definições

7  Quando uma query é executada no Oracle, um result set é produzido e salvo em memória. Oracle permite ao programador acessar este result set em memória através de Cursores.  Muitas vezes, quando uma query retorna mais de uma linha como resultado, seria interessante iterar sobre cada linha e processar os dados de uma maneira diferente para elas. Cursores são úteis neste caso.

8  Declarar (Declare)  Dá um nome ao cursor e o associa a uma query que retornará múltiplas linhas  Abrir (Open)  Executa a query  Acessar (Fetch)  Fechar (Close)  Encerra o processamento do cursor

9  Durante os exemplos e exercícios da aula, será possível ver utilizações práticas de cursores.

10 Exemplos (contextualizado ou não) e exercício

11  Utilizado para modularizar uma consulta, a qual pode ser utilizada em diversos locais, sem necessidade de repetição de código.  Sempre possui retorno. CREATE [OR REPLACE ]FUNCTION [(parâmetro [{IN | OUT | IN OUT}] tipo,....)] RETURN {IS | AS} BEGIN END ;

12  Sem contextualização  Informadas duas datas, montar uma String de retorno contendo o período entre essas duas datas. CREATE OR REPLACE FUNCTION retornarPeriodo (dtInicial DATE, dtFinal DATE) RETURN VARCHAR2 IS retorno VARCHAR2(60); BEGIN SELECT CONCAT (dtInicial, ' a ') INTO retorno FROM DUAL; SELECT CONCAT (retorno, dtfinal) INTO retorno FROM DUAL; return retorno; END;

13 SELECT retornarperiodo(to_date('2008/03/15', 'yyyy/MM/dd'), to_date('2008/11/25', 'yyyy/MM/dd')) from dual;

14  Criar uma função que, passada um cargo como argumento, retorne a média salarial dos funcionários com aquele cargo. CREATE OR REPLACE FUNCTION media_por_cargo (crg Funcionario.Cargo%TYPE) RETURN NUMBER IS v_media NUMBER; BEGIN SELECT AVG (salario) INTO v_media FROM funcionario F WHERE F.Cargo LIKE crg; RETURN v_media; END media_por_cargo;

15  Faça uma função que recebe o nome do esporte e retorna a quantidade de atletas que praticam esse esporte.

16 Exemplos e exercício

17  Utilizado para modularizar uma ação, a qual pode ser reutilizada diversas vezes, sem necessidade de repetição de código.  Não possui retorno. Todas as ações necessárias são realizadas dentro do corpo do procedimento CREATE [OR REPLACE] PROCEDURE [(parâmetro [{IN | OUT | IN OUT}] tipo,....)] {IS | AS} BEGIN END ;

18  Crie uma Procedure que, dada uma equipe, imprima todos os títulos que ela possui. CREATE OR REPLACE PROCEDURE equipeTitulos (codigoEq EQUIPE.CODIGOEQUIPE%TYPE) IS CURSOR cur_titulos IS SELECT CodigoTit FROM DisputaEquiCamp WHERE CodigoEquipe = codigoEq; titulo DISPUTAEQUICAMP.CODIGOTIT%TYPE; BEGIN OPEN cur_titulos; LOOP FETCH cur_titulos INTO titulo; EXIT WHEN cur_titulos%NOTFOUND; DBMS_OUTPUT.PUT_LINE('Titulo de código: ' || to_char(titulo)); END LOOP; CLOSE cur_titulos; END;

19  Criar uma procedure que atualiza o salário de determinado funcionário. Caso o funcionário não exista, emita uma mensagem de alerta;

20 Exercício

21  Utilizado para executar uma ação quando uma outra acontecer, ou seja:  Quando uma determinada ação acontece, uma reação é acionada.  Cuidado com:  Tabelas mutantes  Especificação das restrições de acontecimento

22 CREATE [ OR REPLACE ] TRIGGER [ BEFORE | AFTER | INSTEAD OF ] ON [REFERENCING NEW AS OLD AS ] [ FOR EACH ROW [ WHEN ] ] [ DECLARE PRAGMA AUTONOMOUS_TRANSACTION ] BEGIN END ;

23  Uso de BEFORE possibilita o acesso a valores antigos e novos  Uso de FOR EACH ROW gera várias execuções do gatilho  A opção FOR EACH ROW determina se o gatilho é do tipo row trigger ou statement trigger  Se especificada, o gatilho é executado UMA vez para cada tupla afetada pelo evento  Se omitida, o gatilho é executado UMA ÚNICA vez para cada ocorrência de evento

24  A opção WHEN:  É usada apenas com row triggers  Consiste em uma expressão booleana – SQL  Não pode incluir: ▪ Subconsultas ▪ Expressões em PL/SQL ▪ Funções definidas pelo usuário

25  Criar uma tabela de auditoria para as alterações feitas na tabela funcionário que guarde o usuário, o tipo e a data da modificação feita na tabela bem como os dados modificados do funcionário (código, cargo, salário). CREATE TABLE auditorlog ( audit_date DATE, audit_user VARCHAR2(30), audit_desc VARCHAR2(30), old_func_id NUMBER(7), old_func_carg VARCHAR2(40), old_func_sal NUMBER(7,2), new_func_id NUMBER(7), new_func_carg VARCHAR2(40), new_func_sal NUMBER(7,2) );

26 Exemplo e exercício

27  Utilizado para melhor organização dos elementos do banco de dados.  Na definição do pacote só é apresentada a especificação do mesmo  A implementação é apresentada à parte através do corpo do pacote

28 CREATE [OR REPLACE] PACKAGE {IS|AS} | END ; CREATE [OR REPLACE] PACKAGE BODY {IS|AS} END ;

29  Crie um Package onde, dada uma equipe sejam listadas as modalidades relacionadas a ela. CREATE OR REPLACE PACKAGE manipula_modalidade IS FUNCTION contar_modalidade (codigo_esporte IN esporte.codigoesp%TYPE) RETURN BINARY_INTEGER; PROCEDURE listar_modalidade (codigo_esporte IN esporte.codigoesp%TYPE); END manipula_modalidade; /

30  Continuação CREATE OR REPLACE PACKAGE BODY manipula_modalidade AS FUNCTION contar_modalidade (codigo_esporte IN esporte.codigoesp%TYPE) RETURN BINARY_INTEGER IS quantidade BINARY_INTEGER; BEGIN SELECT COUNT(*) INTO quantidade FROM modalidade m where m.codigoesp = codigo_esporte; RETURN quantidade; END contar_modalidade; PROCEDURE listar_modalidade (codigo_esporte IN esporte.codigoesp%TYPE) IS quantidade NUMBER(3); CURSOR selecao_modalidades IS (SELECT m.descricao, m.codigoesp FROM modalidade m where m.codigoesp = codigo_esporte); registro selecao_modalidades%rowType;

31  Continuação BEGIN SELECT contar_modalidade (codigo_esporte) INTO quantidade from dual; OPEN selecao_modalidades; WHILE quantidade > 0 LOOP FETCH selecao_modalidades INTO registro.descricao, registro.codigoesp; dbms_output.put_line (registro.descricao); quantidade := quantidade - 1; END LOOP; CLOSE selecao_modalidades; END listar_modalidade; END manipula_modalidade; /

32  Crie um Package que insere uma nova equipe e logo em seguida imprime a tabela de equipes atualizada;

33

34  Mesmas regras  Consultas a serem respondidas apenas pelos alunos. Valendo NOTA!  As respostas devem ser enviadas a rcm3@cin.ufpe.br até hoje. rcm3@cin.ufpe.br  Só vale para os alunos aqui presentes, ou seja, para quem ficou até o final da aula! =D  Os email devem seguir o padrão estabelecido, caso contrário, não serão aceitos.

35

36 Muito obrigado!


Carregar ppt "Equipe de monitoria Aula prática 3.  Caso de estudo  Igualando situações  Cursor  Function  Procedure  Trigger  Package  Surpresa..."

Apresentações semelhantes


Anúncios Google