0% encontró este documento útil (0 votos)
197 vistas8 páginas

Retos PL/SQL

El documento contiene instrucciones SQL para crear tablas, ejecutar consultas, procedimientos y funciones. Se crean tablas EMPLDO_ORDEN01 y EMPLDO_ORDEN02, se ejecutan consultas para seleccionar y agrupar datos de las tablas INVENTARIO, PRODUCTO y BODEGA, y se definen procedimientos y funciones para listar y devolver datos de clientes, productos y empleados.

Cargado por

JHOSTIN
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
197 vistas8 páginas

Retos PL/SQL

El documento contiene instrucciones SQL para crear tablas, ejecutar consultas, procedimientos y funciones. Se crean tablas EMPLDO_ORDEN01 y EMPLDO_ORDEN02, se ejecutan consultas para seleccionar y agrupar datos de las tablas INVENTARIO, PRODUCTO y BODEGA, y se definen procedimientos y funciones para listar y devolver datos de clientes, productos y empleados.

Cargado por

JHOSTIN
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd

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 [Link] , COUNT([Link]) , [Link]


FROM INVENTARIO I , PRODUCTO P , BODEGA B
WHERE I.CODIGO_PRODUCTO = [Link] AND
[Link] = I.CODIGO_BODEGA
GROUP BY [Link] ,[Link], [Link] ;
-----------------------------
*****************************--------------------------------------------

SELECT [Link] , [Link] , [Link]


FROM PRODUCTO P, BODEGA B, INVENTARIO I
WHERE [Link] = I.CODIGO_PRODUCTO
AND I.CODIGO_BODEGA = [Link] AND
[Link] = 'Himalaya Tires';

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

SELECT T.CODIGO_ITEM , MIN([Link]) AS MINIMO_DE_ESTOCK , [Link] AS


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

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

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

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

SELECT [Link] AS EMPLEADO ,[Link] AS CLIENTE , [Link] AS CODIGO_CLIENTE ,


MAX([Link]) AS VENTA
FROM ORDEN O, CLIENTE C , EMPLEADO E
WHERE O.CODIGO_CLIENTE = [Link] AND
C.CODIGO_REP_VENTAS = [Link]
GROUP BY [Link], [Link] , [Link];

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


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

CREATE OR REPLACE PROCEDURE SITPR_lISTAR_CLIENTE


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

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

BEGIN
FOR R1 IN C1 LOOP
DBMS_OUTPUT.PUT_LINE('CODIGO PRODUCTO :'|| [Link]
|| 'NOMBRE PRODUCTO:' || [Link] || 'CODIGO BODEGA :' || [Link]);
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 [Link]%TYPE;

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

FOR R1 IN C1 LOOP
V_STOCK := [Link];
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 :' || [Link]);
END LOOP;
END;

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


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

select max([Link]) TOTAL , e.codigo_dept


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

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


QUE HIZO LA VENTA_________________________________________________

SELECT [Link] , [Link] ,[Link], [Link] FROM EMPLEADO E , ORDEN O , CLIENTE


C
WHERE [Link] = O.CODIGO_REP_VENTAS AND
O.CODIGO_CLIENTE = [Link] AND
C.CODIGO_REP_VENTAS = [Link] AND (O.CODIGO_REP_VENTAS,[Link]) IN
(SELECT O.CODIGO_REP_VENTAS , SUM([Link])
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 [Link] "CLIENTE", [Link] , [Link]


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 [Link]
from DEPARTAMENTO D
where [Link] 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 = [Link]);

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

CREATE OR REPLACE FUNCTION FN_DEVOLVER_NOMBRE_EMPLEADOS(P_CODIGO_DEP


EMPLEADO.CODIGO_DEPT%TYPE)
RETURN VARCHAR2 IS
V_NOMBRE_DEPT [Link]%TYPE;

CURSOR C1 IS

SELECT [Link]
FROM DEPARTAMENTO D
WHERE CODIGO = P_CODIGO_DEP;

BEGIN

V_NOMBRE_DEPT:= NULL;
FOR R1 IN C1 LOOP
DBMS_OUTPUT.put_line([Link]);
V_NOMBRE_DEPT:=[Link];
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 [Link], [Link] EMPLEADO,FN_DEVOLVER_NOMBRE_EMPLEADOS,[Link]


FROM ORDEN O, EMPLEADO E, DEPARTAMENTO D
WHERE O.CODIGO_REP_VENTAS = [Link]
AND E.CODIGO_DEPT = [Link];

V_ESTDO := 'N';
begin
FOR R1 IN C1 LOOP
IF [Link]>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([Link],[Link],[Link],[Link],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 [Link] , [Link] EMPLEADO ,v_NOMBRE_DEPARTAMENTO , [Link]


FROM ORDEN O, EMPLEADO E
WHERE O.CODIGO_REP_VENTAS = [Link]
AND E.CODIGO_DEPT = [Link];

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([Link],[Link],R1.:V_NOMBRE_DEPARTAMENTO,[Link],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