Advertisement
Guest User

plsql exercicio

a guest
Nov 20th, 2017
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 2.42 KB | None | 0 0
  1. CREATE TABLE cargo (cd_cargo NUMBER(3) primary key,
  2.                 nm_cargo VARCHAR(10),
  3.                 salario NUMBER(10,2));
  4.  
  5.  
  6. BEGIN
  7. INSERT INTO cargo VALUES (1,'DBA',18500);
  8. INSERT INTO cargo VALUES (2,'Analista',7200);
  9. INSERT INTO cargo VALUES (3,'Estagiario',2500);
  10. END;
  11.  
  12. CREATE TABLE funcionario (cd_fun NUMBER(3) primary key,
  13.                     nm_fun VARCHAR(10),
  14.                     cargo_fk references cargo);
  15.  
  16. BEGIN
  17. INSERT INTO funcionario VALUES (10,'Marcel',1);
  18. INSERT INTO funcionario VALUES (20,'Silvania',1);
  19. INSERT INTO funcionario VALUES (30,'Ana',2);
  20. INSERT INTO funcionario VALUES (40,'Carlos',3);
  21. END;
  22.  
  23.  
  24.  
  25.  
  26. CREATE OR REPLACE PROCEDURE calculo IS CURSOR c_aumentosalario
  27. IS SELECT salario FROM cargo;
  28. v_naotrab NUMBER(5,2) := 2.00 ; --Insira a quantidade de dias não trabalhados
  29. v_diasmes NUMBER(5,2) := 30 ; --Insira a quantidade de dias no mês
  30. BEGIN
  31. FOR v_sal IN c_aumentosalario
  32.  
  33.     LOOP
  34.         IF v_sal.salario <= 2500 THEN
  35.         UPDATE cargo SET salario = salario * 1.125 WHERE salario = v_sal.salario;
  36.         ELSIF v_sal.salario > 2500 AND v_sal.salario <= 7800 THEN
  37.         UPDATE cargo SET salario = salario * 1.08 WHERE salario = v_sal.salario;
  38.         ELSIF v_sal.salario > 7800 AND v_sal.salario <= 15000 THEN
  39.         UPDATE cargo SET salario = salario * 1.025 WHERE salario = v_sal.salario;
  40.         ELSIF v_sal.salario > 15000 THEN
  41.         UPDATE cargo SET salario = salario * 1 WHERE salario = v_sal.salario;
  42.         END IF;
  43.     COMMIT;
  44.     END LOOP;
  45.         IF v_naotrab < ((v_diasmes/100) * 10) THEN
  46.         UPDATE cargo SET salario = salario + 100;
  47.    END IF;
  48. END calculo;
  49.  
  50. DECLARE
  51. CURSOR c_display IS SELECT f.cd_fun, f.nm_fun, f.cargo_fk, c.salario, c.nm_cargo, c.cd_cargo FROM funcionario f inner join cargo c ON f.cargo_fk = c.cd_cargo;
  52. v_sal cargo.salario%TYPE;
  53. v_func funcionario.nm_fun%TYPE;
  54. v_salantigo NUMBER(7,2);
  55.  
  56.     BEGIN
  57.         FOR v_cargos IN c_display
  58.     LOOP
  59.         DBMS_OUTPUT.PUT_LINE('Nome: '||v_cargos.nm_fun||' - Salário Antigo: R$ '||v_cargos.salario);
  60.     END LOOP;
  61.  
  62.     calculo;
  63.      DBMS_OUTPUT.PUT_LINE('____________________________________________________________________');
  64.     FOR v_display IN c_display
  65.     LOOP
  66.         DBMS_OUTPUT.PUT_LINE('Nome: '||v_display.nm_fun||' - Salário Novo R$: '||v_display.salario);
  67.         END LOOP;
  68. END;
  69.  
  70.  
  71.  
  72.  
  73.  
  74.   SELECT * FROM cargo;
  75.   SELECT * FROM funcionario;
  76.  
  77.  
  78. DROP TABLE funcionario;
  79. DROP TABLE cargo;
  80. DROP PROCEDURE calculo;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement