Advertisement
Guest User

Untitled

a guest
May 27th, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 1.34 KB | None | 0 0
  1. CREATE OR REPLACE PROCEDURE relatorio_salarios_depto IS
  2.     v_tabela_relatorios NUMBER;
  3. BEGIN
  4.     -- procura a tabela no catálogo
  5.     SELECT
  6.         COUNT(*) INTO v_tabela_relatorios
  7.     FROM
  8.         user_tables
  9.     WHERE
  10.         table_name = UPPER('relatorio_salarios');
  11.     -- verifica se encontrou
  12.     IF v_tabela_relatorios = 1 THEN
  13.         -- apaga se existir
  14.         EXECUTE IMMEDIATE 'drop table relatorio_salarios';
  15.     END IF;
  16.     -- cria a tabela
  17.     EXECUTE IMMEDIATE 'create table relatorio_salarios (departamento varchar2(15), soma_salarios number)';
  18.     -- calcula a soma dos salários por departamento
  19.     FOR r_soma IN (
  20.         SELECT
  21.             SUM(f.salario) soma_salarios,
  22.             d.nome_departamento departamento
  23.         FROM
  24.             funcionario f
  25.         inner join departamento d
  26.             ON d.id_departamento = f.id_departamento
  27.         GROUP BY
  28.             d.nome_departamento
  29.     ) LOOP
  30.         -- insere na tabela de relatório (como a tabela é criada dinamicamente dentro da procedure devemos usar 'execute immediate')
  31.         EXECUTE IMMEDIATE 'insert into relatorio_salarios(departamento, soma_salarios) values (:departamento, :soma_salarios)' using r_soma.departamento, r_soma.soma_salarios;
  32.     END LOOP;
  33.     DBMS_OUTPUT.put_line('Relatório gerado na tabela > relatorio_salarios <');
  34. END;
  35. /
  36. ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement