Está en la página 1de 8

CREAR TABLAS

CREATE TABLE EMPLDO_ORDEN01(CDGO_EMPLDO NUMBER(7)NOT NULL,


NMBRE_EMPLDO VARCHAR2(25)NOT NULL,
NMBRE_DPRTMNTO VARCHAR2(20)NOT NULL,
SALARIO NUMBER(11,2)NOT NULL,
RANGO VARCHAR2(20)NOT NULL,
ESTADO VARCHAR2(1) DEFAULT 'N',CONSTRAINT CHK_ESTADO CHECK(ESTADO IN('S','N')));

CREATE TABLE EMPLDO_ORDEN02(CDGO_EMPLDO NUMBER(7)NOT NULL,


NMBRE_EMPLDO VARCHAR2(25)NOT NULL,
NMBRE_DPRTMNTO VARCHAR2(20)NOT NULL,
SALARIO NUMBER(11,2)NOT NULL,
RANGO VARCHAR2(20)NOT NULL,
ESTADO VARCHAR2(1) DEFAULT 'N',CONSTRAINT CHK_ESTADO02 CHECK(ESTADO
IN('S','N')));

-----------------------------------
********************************---------------------------------------------------
------------

SELECT P.CODIGO , COUNT(I.STOCK) , B.CODIGO


FROM INVENTARIO I , PRODUCTO P , BODEGA B
WHERE I.CODIGO_PRODUCTO = P.CODIGO AND
B.CODIGO = I.CODIGO_BODEGA
GROUP BY P.CODIGO ,I.STOCK, B.CODIGO ;
-----------------------------
*****************************--------------------------------------------

SELECT P.CODIGO , P.NOMBRE , B.CODIGO


FROM PRODUCTO P, BODEGA B, INVENTARIO I
WHERE P.CODIGO = I.CODIGO_PRODUCTO
AND I.CODIGO_BODEGA = B.CODIGO AND
P.NOMBRE = 'Himalaya Tires';

----------------------------------------------
****************************---------------------------------------------

SELECT T.CODIGO_ITEM , MIN(I.STOCK) AS MINIMO_DE_ESTOCK , B.CODIGO AS


CODIGO_DE_BODEGA
FROM ITEM T , INVENTARIO I , PRODUCTO P, BODEGA B
WHERE T.CODIGO_PRODUCTO = I.CODIGO_PRODUCTO
AND I.CODIGO_BODEGA = B.CODIGO
GROUP BY I.CODIGO_BODEGA , B.CODIGO, T.CODIGO_ITEM;

--------------------------------------------
************************--------------------------------------------------

RETOS
SELECT R.NOMBRE "REGION" , E.NOMBRE "EMPLEADO HIZO MAYOR VENTA" , O.TOTAL "VALOR
VENTA"
FROM REGION R, ORDEN O, CLIENTE C , EMPLEADO E
WHERE O.CODIGO_REP_VENTAS = E.CODIGO
AND O.CODIGO_CLIENTE = C.CODIGO
AND C.CODIGO_REGION = R.CODIGO
AND (O.CODIGO_REP_VENTAS, O.TOTAL) IN (SELECT E.CODIGO , MAX(O.TOTAL ) TOTAL
FROM ORDEN O, EMPLEADO E
WHERE O.CODIGO_REP_VENTAS = E.CODIGO
GROUP BY O.CODIGO_REP_VENTAS)

------------------------------------------
****************************_______________________________________________________
_____________________________

SELECT E.CODIGO AS EMPLEADO ,C.NOMBRE AS CLIENTE , C.CODIGO AS CODIGO_CLIENTE ,


MAX(O.TOTAL) AS VENTA
FROM ORDEN O, CLIENTE C , EMPLEADO E
WHERE O.CODIGO_CLIENTE = C.CODIGO AND
C.CODIGO_REP_VENTAS = E.CODIGO
GROUP BY E.CODIGO, C.NOMBRE , C.CODIGO;

------------------------------------******** SITPR _LISTAR CLIENTE QUE MAS


COMPRARON*****************************------------------------------------------

CREATE OR REPLACE PROCEDURE SITPR_lISTAR_CLIENTE


IS
CURSOR C1 IS SELECT E.CODIGO AS EMPLEADO ,C.NOMBRE AS CLIENTE ,
C.CODIGO AS CODIGO_CLIENTE , MAX(O.TOTAL) AS VENTA
FROM ORDEN O, CLIENTE C , EMPLEADO E
WHERE O.CODIGO_CLIENTE = C.CODIGO AND
C.CODIGO_REP_VENTAS = E.CODIGO
GROUP BY E.CODIGO, C.NOMBRE , C.CODIGO;
BEGIN
FOR R1 IN C1 LOOP
DBMS_OUTPUT.PUT_LINE
('CODIGO EMPLEADO :'|| R1.EMPLEADO || 'NOMBRE CLIENTE :'
|| R1.CLIENTE ||'CODIGO CLIENTE :'|| R1.CODIGO_CLIENTE ||'TOTAL VENTA :' ||
R1.VENTA);
END LOOP;
END SITPR_lISTAR_CLIENTE ;

--------------------------------------------
*************************SITPR_lISTAR_PRODUCTOS***********************-------------
------------------------------------------------
CREATE OR REPLACE PROCEDURE SITPR_lISTAR_PRODUCTOS
IS
CURSOR C1 IS SELECT P.CODIGO , P.NOMBRE , B.CODIGO CODG
FROM PRODUCTO P, BODEGA B, INVENTARIO I
WHERE P.CODIGO = I.CODIGO_PRODUCTO
AND I.CODIGO_BODEGA = B.CODIGO AND
P.NOMBRE = 'Himalaya Tires';

BEGIN
FOR R1 IN C1 LOOP
DBMS_OUTPUT.PUT_LINE('CODIGO PRODUCTO :'|| R1.CODIGO
|| 'NOMBRE PRODUCTO:' || R1.NOMBRE || 'CODIGO BODEGA :' || R1.CODG);
END LOOP;
END SITPR_lISTAR_PRODUCTOS ;

-----------------------------************ FUNCION DEVOLVER_STOCK


*******************----------------------------------------------------------------
--------

CREATE OR REPLACE FUNCTION DEVOLVER_STOCK(P_CODIGO_BODEGA INVENTARIO.CODIGO_BODEGA


%TYPE,
P_CODIGO_PRODUCTO
INVENTARIO.CODIGO_PRODUCTO%TYPE)
RETURN NUMBER
IS
V_STOCK INVENTARIO.STOCK%TYPE;

CURSOR C1 IS
SELECT P.NOMBRE , P.CODIGO , COUNT(I.STOCK) STO
FROM INVENTARIO I , PRODUCTO P , BODEGA B
WHERE I.CODIGO_PRODUCTO = P_CODIGO_PRODUCTO
AND I.CODIGO_BODEGA = P_CODIGO_BODEGA
GROUP BY P.NOMBRE ,P.CODIGO , I.STOCK ;
BEGIN
V_STOCK := 0;

FOR R1 IN C1 LOOP
V_STOCK := R1.STO;
dbms_output.put_line('ASIGNANDO VALOR A LA VARIABLE V_STOCK');
END LOOP;
IF V_STOCK = 0 THEN
dbms_output.put_line('VALORES INCORRECTOS');
END IF;
RETURN V_STOCK;
END DEVOLVER_STOCK;

--------------------------------------------******************LISTAR NOMBRE
EMPLEADO CONTENGAN A****************----------------------------------------------

CREATE OR REPLACE PROCEDURE SITPR_lISTAR_NOMBRE


is
cursor C1 is SELECT NOMBRE
FROM EMPLEADO
WHERE NOMBRE LIKE LOWER('%A%');

BEGIN
FOR R1 IN C1 LOOP
DBMS_OUTPUT.put_line('NOMBRE CONTENGAN A :' || R1.NOMBRE);
END LOOP;
END;

-----------------------------------------------------EMPLEADOS POR DEPARTAMENTO ,


VISUALIZAR MAYORES AQUELLOS DEP 20
EMPLEADOS------------------------------------------

select max(e.codigo) TOTAL , e.codigo_dept


from empleado e , departamento d
where e.codigo_dept = d.codigo
group by e.codigo_dept , e.codigo
having max(e.codigo) > 20

----------------------******************************VENTAS POR PERIODO Y EMPLEADO


QUE HIZO LA VENTA_________________________________________________

SELECT C.CODIGO , E.NOMBRE ,E.APELLIDO, O.TOTAL FROM EMPLEADO E , ORDEN O , CLIENTE


C
WHERE E.CODIGO = O.CODIGO_REP_VENTAS AND
O.CODIGO_CLIENTE = C.CODIGO AND
C.CODIGO_REP_VENTAS = E.CODIGO AND (O.CODIGO_REP_VENTAS,O.TOTAL) IN
(SELECT O.CODIGO_REP_VENTAS , SUM(O.TOTAL)
FROM ORDEN O
WHERE
TO_CHAR(O.FECHA_ORDEN, 'YYYYMMDD')
BETWEEN '19920801' AND '19920931'
GROUP BY O.CODIGO_REP_VENTAS )

------------------------------------------
****************************************************-------------------------------
-------------------

Muestre los EMPLEADOS que tienen una SALARIO menor al promedio, SU SALARIO, y la
diferencia con el promedio.

SELECT NOMBRE ,
(SELECT AVG(SALARIO) FROM EMPLEADO)-SALARIO AS DIFERENCIA
FROM EMPLEADO
WHERE SALARIO <
(SELECT AVG(SALARIO) FROM EMPLEADO);

------------------------------------------------------------
****************************-----------------------------------------------------

Obtenga todos los datos de los EMPLEADOS con EL SALARIO MAS ALTO

SELECT EMPLEADO.*
FROM EMPLEADO
WHERE SALARIO = (SELECT MAX(SALARIO) FROM EMPLEADO)

----------------------------------------
**********************************-------------------------------------------------
---------------------------

Necesitamos conocer los nombres de las REGIONES de aquellos clientes cuyo domicilio
es en calle "6 Saint Antoine", empleando subconsulta.

SELECT C.NOMBRE "CLIENTE", C.DIRECCION , C.CIUDAD


FROM CLIENTE C
WHERE DIRECCION = (SELECT DIRECCION FROM CLIENTE
WHERE DIRECCION = '6 Saint Antoine')

---------------------------------------------
*****************************************************------------------------------
-----------------------

Obtenga los nombre de LOS EMPLEADOS de los DEPARTAMENTOS cuyo NOMBRE no comienza
con una letra especfica (letra "G"),

select nombre
from EMPLEADO
where codigo NOT IN
(select D.CODIGO
from DEPARTAMENTO D
where D.nombre like 'A%');

-----------------------------------------------
*************************************************----------------------------------
------------------

Buscamos todos los deportes que se dictan el mismo da que un determinado deporte
(natacion) empleando subconsulta (1 registro)

select nombre
from deportes
where nombre<>'natacion' and
dia =
(select dia
from deportes
where nombre='natacion');

------------------------------------
********************************************---------------------------------------
----------------------

SELECT E.*
FROM EMPLEADO E
WHERE EXISTS(SELECT CODIGO_REP_VENTAS
FROM ORDEN O
WHERE O.CODIGO_REP_VENTAS = E.CODIGO);

-----------------------------------------------------------------
**********************************-------------------------------------------------
---------

CREATE OR REPLACE FUNCTION FN_DEVOLVER_NOMBRE_EMPLEADOS(P_CODIGO_DEP


EMPLEADO.CODIGO_DEPT%TYPE)
RETURN VARCHAR2 IS
V_NOMBRE_DEPT DEPARTAMENTO.NOMBRE%TYPE;

CURSOR C1 IS

SELECT D.NOMBRE
FROM DEPARTAMENTO D
WHERE CODIGO = P_CODIGO_DEP;

BEGIN

V_NOMBRE_DEPT:= NULL;
FOR R1 IN C1 LOOP
DBMS_OUTPUT.put_line(R1.NOMBRE);
V_NOMBRE_DEPT:=R1.NOMBRE;
END LOOP;

RETURN V_NOMBRE_DEPT;

END FN_DEVOLVER_NOMBRE_EMPLEADOS;

-----------------------------------------------
*********************************************--------------------------------------
---------

create or replace procedure INSERTAR_ACTUALIZAR


is
V_ESTDO EMPLDO_ORDEN01.ESTADO%TYPE;
V_RNGO1 EMPLDO_ORDEN01.RANGO%TYPE;

CURSOR C1 IS

SELECT E.CODIGO, E.NOMBRE EMPLEADO,FN_DEVOLVER_NOMBRE_EMPLEADOS,E.SALARIO


FROM ORDEN O, EMPLEADO E, DEPARTAMENTO D
WHERE O.CODIGO_REP_VENTAS = E.CODIGO
AND E.CODIGO_DEPT = D.CODIGO;

V_ESTDO := 'N';
begin
FOR R1 IN C1 LOOP
IF R1.SALARIO>1500 THEN
V_RNGO1:='ALTO';
ELSE
V_RNGO1:='BAJO';
END IF;

IF EXISTS(SELECT O.CODIGO_REP_VENTAS FROM ORDEN O) THEN

INSERT INTO
EMPLDO_ORDEN02(CDGO_EMPLDO,NMBRE_EMPLDO,NMBRE_DPRTMNTO,SALARIO,RANGO,ESTADO)
VALUES(R1.CODIGO,R1.EMPLEADO,R1.NOMBRE,R1.SALARIO,V_RANGO,V_ESTADO);

DELETE * FROM EMPLDO_ORDEN01 WHERE CDGO_EMPLDO = CDGO_EMPLDO;

UPDATE EMPLDO_ORDEN02 SET ESTADO='S' WHERE ESTADO='N' ;

end INSERTAR_ACTUALIZAR;

-------------------------------------------------
*******************************************************____________________________
_________________create or replace procedure PR_INSERTAR_ACTUALIZAR
is
V_ESTDO EMPLDO_ORDEN01.ESTADO%TYPE;
V_RNGO1 EMPLDO_ORDEN01.RANGO%TYPE;

CURSOR C1 IS

SELECT E.CODIGO , E.NOMBRE EMPLEADO ,v_NOMBRE_DEPARTAMENTO , E.SALARIO


FROM ORDEN O, EMPLEADO E
WHERE O.CODIGO_REP_VENTAS = E.CODIGO
AND E.CODIGO_DEPT = D.CODIGO;

begin
v_NOMBRE_DEPARTAMENTO := FN_DEVOLVER_NOMBRE_EMPLEADOS(P_CODIGO_DEP);
V_ESTDO := 'N';
V_RANGO := NULL ;
V_SALARIO := 0 ;

FOR R1 IN C1 LOOP
IF R1.:V_NOMBRE_DEPARTAMENTO THEN
END IF;
v_NOMBRE_DEPARTAMENTO := NULL

INSERT INTO
EMPLDO_ORDEN01(CDGO_EMPLDO,NMBRE_EMPLDO,NMBRE_DPRTMNTO,SALARIO,RANGO,ESTADO)

VALUES(R1.CODIGO,R1.EMPLEADO,R1.:V_NOMBRE_DEPARTAMENTO,R1.SALARIO,V_RANGO,V_ESTADO)
;
DBMS_OUTPUT.put_line('DATOS INSERTADOS CORRECTAMENTE');

ELSE

UPDATE EMPLDO_ORDEN01
SET(CDGO_EMPLDO,NMBRE_EMPLDO,NMBRE_DPRTMNTO,SALARIO,RANGO,ESTADO) ;
DBMS_OUTPUT.put_line('DATOS ACTUALIZADOS CORRECTAMENTE');

end PR_INSERTAR_ACTUALIZAR;

También podría gustarte