Sie sind auf Seite 1von 4

----SCOTT-----1.

-Realizar una consulta que liste el cdigo del empleado, nombre, fecha de ingr
eso (hiredate)
--y nombre del departamento de los trabajadores que laboren en el departamento d
e ventas (SALES).
--Usar las tablas emp y dept del usuario SCOTT
select * from emp;
select * from dept;
SELECT E.EMPNO,E.ENAME,E.HIREDATE,D.DNAME FROM EMP E JOIN DEPT D
ON E.deptno = D.deptno
WHERE D.DNAME='SALES';
--2.-Listar el nombre de todos los empleados cuyo
--salario sea mayor al salario del usuario SCOTT (usar sub-consultas)
SELECT * FROM EMP WHERE SAL > (SELECT SAL FROM EMP WHERE ENAME='SCOTT');
--3.-Listar la suma total de los salarios(sal) agrupados por puesto de trabajo(j
ob).
SELECT JOB, AVG(SAL) FROM emp
GROUP BY JOB
ORDER BY 1 ASC;
-----SYSTEM---4.-Lista todas las tablas que ha creado el usuario SCOTT entre el 01/01/2010 y
el 31/10/2012
SELECT * FROM dba_tables WHERE owner='SCOTT' AND last_analyzed BETWEEN '01/01/20
10' AND '31/10/2014';
--5.-Listar las tablas del diccionario de datos cuyo nombre contenga la palabra A
UDIT y solo puedan ser ledos por usuarios con el rol DBA
SELECT * FROM dictionary WHERE TABLE_NAME LIKE '%DBA%AUDIT%';
----SCOTT-----6.-Calcular su edad usando MONTHS_BETWEEN
SELECT TRUNC (months_between(SYSDATE,'27/04/1990')/12) FROM DUAL;
--7.-Obtener la fecha de hoy con el siguiente formato: Hoy es NOMBRE_DIA,DIA_MES
de NOMBRE_MES del AO (Sbado, 3 de NOVIEMBRE del 2012).
SELECT 'HOY ES,'|| TO_CHAR(SYSDATE,'day,dd " de " month " de " yyyy') from dual;
--8.-Mostrar el nombre y la quinta parte (con 2 decimales) redondeados; del suel
do de
--los empleados cuyo sueldo es mayor a 1800
SELECT ENAME, ROUND((SAL/5),2)FROM EMP where sal> 1800;
--9.-Extraer la ante-penltima letra del nombre de todos los empleados de la tabla
EMP
select * from emp;
SELECT ENAME, SUBSTR(ENAME,-3,1) FROM EMP;
--10
--Cree un procedimiento almacenado llamado "SP_AUMENTA_SUELDO". Debe
--incrementar el sueldo de los empleados con cierta cantidad de aos en la empresa
--(parmetro "ayear" de tipo numrico) en un porcentaje (parmetro "aporcentaje" de
--tipo numerico); es decir, recibe 2 parmetros.
--*El campo HIREDATE es la fecha de ingreso del empleado a la empresa
CREATE OR REPLACE PROCEDURE SP_AUMENTA_SUELDO
(ayear in number , aporcentaje in number ) IS
BEGIN
update emp set sal= sal+ (aporcentaje/100)*sal
where trunc((sysdate-hiredate)/360) = ayear;
commit;
END;

--Validacin:
EXECUTE SP_AUMENTA_SUELDO(0,10);
--Bloque de ejecucin:
SET SERVEROUTPUT ON
DECLARE
AYEAR NUMBER:=0;
APORCENTAJE NUMBER:=10;
BEGIN
SP_AUMENTA_SUELDO(AYEAR, APORCENTAJE);
END;
--11
--Crear un Store Procedure que actualice el campo COMM de la tabla EMP con un
--10% del Salario a los Empleados cuyo Departamentos tengan de 0 a 2 empleados,
--15% del Salario a los Empleados cuyo Departamentos tengan de 3 a 5 empleados y
--20% del Salario a los Empleados cuyo Departamentos tengan mas de 5 empleados
--(Usar cursores, %type o %rowtype) El procedure no necesita que ingrese variabl
es.
CREATE OR REPLACE PROCEDURE SP_ACTUALIZA_COMM
AS
V_DEPTNO DEPT.DEPTNO%TYPE;
CURSOR C1 IS
select d.deptno from emp e, dept d
where e.deptno=d.deptno
group by d.deptno, d.dname
having count(e.empno) between 0 and 2;
CURSOR C2 IS
select d.deptno from emp e, dept d
where e.deptno=d.deptno
group by d.deptno, d.dname
having count(e.empno) between 3 and 5;
CURSOR C3 IS
select d.deptno from emp e, dept d
where e.deptno=d.deptno
group by d.deptno, d.dname
having count(e.empno) >5;
BEGIN
OPEN C1;
LOOP
FETCH C1 INTO V_DEPTNO;
EXIT WHEN C1%NOTFOUND;
UPDATE EMP SET COMM=(SAL*0.10) WHERE DEPTNO=V_DEPTNO;
COMMIT;
END LOOP;
CLOSE C1;
OPEN C2;
LOOP
FETCH C2 INTO V_DEPTNO;
EXIT WHEN C2%NOTFOUND;
UPDATE EMP SET COMM=(SAL*0.15) WHERE DEPTNO=V_DEPTNO;
COMMIT;
END LOOP;
CLOSE C2;
OPEN C3;

LOOP
FETCH C3 INTO V_DEPTNO;
EXIT WHEN C3%NOTFOUND;
UPDATE EMP SET COMM=(SAL*0.20) WHERE DEPTNO=V_DEPTNO;
COMMIT;
END LOOP;
CLOSE C3;
END;
--Ejecucin
EXECUTE SP_ACTUALIZA_COMM
--Bloque de ejecucin:
SET SERVEROUTPUT ON
BEGIN
SP_ACTUALIZA_COMM;
END;

--12
SELECT * FROM EMP
SELECT * FROM dept
create or replace PROCEDURE registro
(w_codigo_dept in dept.deptno% TYPE, w_name in dept.dname% TYPE,w_sede in dept.l
oc%type)
as
begin
insert into dept (deptno, dname, loc)
values (w_codigo_dept,w_name,w_sede);
commit;
end registro;
EXECUTE REGISTRO (77,'REDES','MIRAFLORES');
create or replace PROCEDURE ACTUALIZAR
(w_sede in dept.loc%type)
AS
BEGIN
UPDATE DEPT SET LOC='miraflores' WHERE LOC=w_sede;
END ACTUALIZAR;
EXECUTE ACTUALIZAR ('SEDE_NORTE')
create or replace PROCEDURE ELIMINAR
(w_codigo_dept in dept.deptno% TYPE)
AS
BEGIN
DELETE FROM DEPT WHERE DEPTNO=w_codigo_dept;
COMMIT;
END ELIMINAR;
EXECUTE ELIMINAR (77);
--13
CREATE OR REPLACE FUNCTION INGRESAR (v_empno in emp.empno%type)
RETURN number
IS
cts number := 0;
BEGIN
select round(((sal*14) + (0.2*sal)/6),2) into cts from emp where empno=v_empno a

nd hiredate >= '01/06/1981';


if cts is null then
return 0;
DBMS_OUTPUT.PUT_LINE('NO CORRESPONDE CTS');
else
return cts;
end if;
END;
----------------------SELECT * FROM SCOTT.emp;
SELECT * FROM DBA_USERS; --TABLA MUESTRA TODOS LOS USUARIOS CREADOS EN LA BD
SELECT * FROM dba_users WHERE NOT account_status='OPEN';
SELECT * FROM dba_users WHERE account_status!='OPEN';
SELECT * FROM dba_users WHERE account_status LIKE '%LOCKED%';
SELECT * FROM dba_tables; --TABLA MUESTRA TODOS LAS TABLAS CREADOS EN LA BD
--LISTAR TODAS LAS TABAS CREADAS POR EL USUARIO SCOTT CREADAS ENTRE 01/01/2009 AL
01/12/2013
SELECT * FROM dba_tables WHERE owner='SCOTT' AND last_analyzed BETWEEN '01/04/20
09' AND '01/12/2013';
SELECT * FROM dba_objects; --ESTAN TODOS LOS OBJETOS DE LA BASE DE DATOS ES EL U
NICO DONDE SE ENCUENTRA LA FECHA DE CREACION
--LISTAR TODAS LAS TABAS CREADAS POR EL USUARIO SCOTT CREADAS ENTRE 01/01/2009 AL
01/12/2013
SELECT * FROM dba_objects WHERE owner='SCOTT' AND created BETWEEN '01/04/2009' A
ND '01/12/2013' AND object_type='TABLE';
--ALTERAR CONTRASEA USUARIO
ALTER USER SCOTT IDENTIFIED BY cibertec;
--DESBLOQUEAR UN USUARIO
ALTER USER SCOTT ACCOUNT UNLOCK;
--BLOQUEAR UN USUARIO
ALTER USER SCOTT ACCOUNT LOCK;
REVOKE DBA FROM SCOTT;
SELECT * FROM DICT
WHERE TABLE_NAME LIKE 'DBA_OBJ%'