ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Base de Datos. Escriba un bloque PL/SQL


Enviado por   •  24 de Mayo de 2020  •  Examen  •  1.069 Palabras (5 Páginas)  •  129 Visitas

Página 1 de 5
  1. Escriba un bloque PL/SQL que utilice un cursor para seleccionar los cinco empleados mejor pagados de la tabla employees

set SERVEROUTPUT ON

declare

v_salario employees.salary%type;

v_cod employees.employee_id%type;

v_nombre employees.first_name%type;

v_contador number:=0;

cursor pagados is

select employee_id, first_name, salary

from employees

order by salary desc;

begin

open pagados;

loop

fetch pagados into v_cod, v_nombre, v_salario;

DBMS_OUTPUT.PUT_LINE('codigo: '||v_cod||' Nombre: '||v_nombre||' Salarios: '||v_salario);

v_contador :=v_contador + 1;

exit when v_contador >=5;

end loop;

end;

/

  1. Crear una función llamada FUNC_UNO que dado el código de un empleado retorne la ciudad en la que trabaja

set SERVEROUTPUT ON

create or replace function FUN_UNO

(cod_emp in employees.employee_id%type)

return varchar2

is

v_cod employees.employee_id%type;

v_nombre employees.first_name%type;

v_ciudad locations.city%type;

begin

select e.employee_id, e.first_name, l.city

into v_cod, v_nombre, v_ciudad

from employees e, departments d, locations l

where e.department_id = d.department_id and

      d.location_id = l.location_id and

      employee_id = cod_emp;

return v_ciudad;

DBMS_OUTPUT.PUT_LINE('codigo: '||v_cod||' Nombre: '||v_nombre||' Ciudad: '||v_ciudad);

end FUN_UNO;

select employee_id, first_name, FUN_UNO(employee_id) ciudad

from employees

order by employee_id;

  1. Crear un PLSQL donde utilice un cursor para que dado el código de dos empleados (como parámetro), devuelva el employee_id  y department_id , de todos empleados  que tienen el mismo manager_id y department_id  (que el de los empleados dados como parámetro).Además por cada registro que devuelva el cursor llamar a la función FUNC_UNO para imprimir en pantalla el nombre del empleado y la ciudad donde trabaja cada uno de ellos

CREATE OR REPLACE PROCEDURE compas(

           e1_id IN employees.employee_id%TYPE,

     e2_id IN employees.employee_id%TYPE,

           c_dbuser OUT SYS_REFCURSOR)

IS

BEGIN

  OPEN c_dbuser FOR

     SELECT employee_id, department_id  FROM employees

     WHERE manager_id IN (SELECT manager_id from employees where employee_id=e1_id OR  employee_id=e2_id)

     AND department_id IN (SELECT department_id from employees where employee_id=e1_id OR employee_id=e2_id);

END;

SET SERVEROUTPUT ON

DECLARE

  c_dbuser SYS_REFCURSOR;

  v_empid employees.employee_id%TYPE;

  v_depid employees.department_id%TYPE;

BEGIN

   compas(110,120,c_dbuser);

  LOOP

        FETCH c_dbuser INTO v_empid,v_depid;

        EXIT WHEN c_dbuser%NOTFOUND;

        dbms_output.put_line(v_empid ||'      '||v_depid  ||'      '|| FUNC_UNO(v_empid));

  END LOOP;

  CLOSE c_dbuser;

 

END;

  1. Crear un procedimiento que me indique en pantalla para todos los empleados  (tabla employees) que tengan un salario mayor a $3000 cuantos compañeros de trabajo tiene cada uno de ellos.

CREATE OR REPLACE PROCEDURE showSal

IS

v_empid employees.first_name%TYPE;

v_depid employees.department_id%TYPE;

v_sal employees.salary%TYPE;

v_num NUMBER;

c_dbuser SYS_REFCURSOR;

BEGIN

OPEN c_dbuser FOR

     SELECT e.first_name , e.salary, e.department_id, COUNT(es.employee_id)-1

     from employees e, employees es

     where e.salary >3000 and es.department_id= e.department_id

     GROUP BY e.first_name , e.salary,e.department_id ORDER BY e.department_id;

     

 LOOP

        FETCH c_dbuser INTO v_empid,v_sal,v_depid,v_num;

        EXIT WHEN c_dbuser%NOTFOUND;

        dbms_output.put_line(v_empid ||'      '||v_depid  ||'      '|| TO_CHAR(v_num));

  END LOOP;

  CLOSE c_dbuser;

END;

execute showSal;

Grupo II

  1. Escriba un bloque PL/SQL que utilice un cursor para seleccionar los cinco empleados peor pagados de la tabla employees

set SERVEROUTPUT ON

declare

cod_emp employees.employee_id%type;

v_nombre employees.first_name%type;

v_salario employees.salary%type;

v_contador number:=0;

cursor mal_pagados is

select employee_id, first_name, salary

from employees

order by salary asc;

begin

open mal_pagados;

loop

fetch mal_pagados into cod_emp, v_nombre, v_salario;

DBMS_OUTPUT.PUT_LINE('codigo: '||cod_emp||' Nombre: '||v_nombre||' Salarios: '||v_salario);

v_contador := v_contador + 1;

exit when v_contador >=5;

...

Descargar como (para miembros actualizados) txt (7 Kb) pdf (79 Kb) docx (12 Kb)
Leer 4 páginas más »
Disponible sólo en Clubensayos.com