0% encontró este documento útil (0 votos)
78 vistas22 páginas

Practica de Repaso PL SQL

Este documento contiene prácticas y ejemplos de PL/SQL que se usarán durante un curso sobre bases de datos. Incluye prácticas con cursores, funciones, paquetes y una práctica completa para crear tablas, insertar datos de ejemplo y realizar operaciones de inserción, actualización y eliminación con registros.

Cargado por

Johana Herrera
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 PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
78 vistas22 páginas

Practica de Repaso PL SQL

Este documento contiene prácticas y ejemplos de PL/SQL que se usarán durante un curso sobre bases de datos. Incluye prácticas con cursores, funciones, paquetes y una práctica completa para crear tablas, insertar datos de ejemplo y realizar operaciones de inserción, actualización y eliminación con registros.

Cargado por

Johana Herrera
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 PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 22

BASES DE DATOS II

Prácticas completas PL/SQL 12c

1. Introducción
x Este documento agrupa todos los ejemplos y prácticas que se hacen durante el
curso.
x Están los enunciados y al final de cada capítulo se encuentran las soluciones,
x En el curso, en cada capítulo dispones del código fuente de cada vídeo, para
que podáis copiarlo con tranquilidad. Está en Recursos disponibles.
x Las tablas que vamos a usar pertenecen al usuario HR, que es el usuario de
ejemplo de Oracle del que hemos creado en la conexión que se usa durante el
curso.
x Básicamente usaremos las siguientes:
o EMPLOYEES: tabla de empleados
o DEPARTMENTS: contiene lo departamentos
o REGIONS: contiene las regiones
o JOBS: contiene los tipos de trabajos
o COUNTRIES: contiene los paises
x En las PRÁCTICAS tienes un fichero asociado con la solución
x Cualquier duda que tengas no dudes en pedir ayuda

1
BASES DE DATOS II

PRÁCTICAS CON CURSORES


x 1-Hacer un programa que tenga un cursor que vaya visualizando los salarios de
los empleados. Si en el cursor aparece el jefe (Steven King) se debe generar un
RAISE_APPLICATION_ERROR indicando que el sueldo del jefe no se puede
ver.
x 2-Hacemos un bloque con dos cursores. (Esto se puede hacer fácilmente con una
sola SELECT pero vamos a hacerlo de esta manera para probar parámetros en
cursores)
o El primero de empleados
o El

2
BASES DE DATOS II

EXECUTE visualizar(60,v_conteo);
DBMS_OUTPUT.PUT_LINE(visualizar.v_conteo);
DECLARE
x NUMBER;
BEGIN
visualizar(60,x);
DBMS_OUTPUT.PUT_LINE(x);
END;
/

x Práctica 3
CREATE OR REPLACE PROCEDURE formateo_cuenta (numero IN OUT
VARCHAR2)
IS
guardar1 VARCHAR2(20);
guardar2 VARCHAR2(20);
guardar3 VARCHAR2(20);
guardar4 VARCHAR2(20);
BEGIN
guardar1:=substr(numero,1,4);
guardar2:=substr(numero,5,4);
guardar3:=substr(numero,9,2);
guardar4:=substr(numero,10);
numero:=guardar1 || '-' || guardar2 || '-' || guardar3 || '-' || guardar4;
END;
/

DECLARE
x varchar2(30):='15210457901111111111';
BEGIN
formateo_cuenta(x);
dbms_output.put_line(x);
END;

6
BASES DE DATOS II

3. PRACTICA DE FUNCIONES
x 1-Crear una función que tenga como parámetro un número de departamento y
que devuelve la suma de los salarios de dicho departamento. La imprimimos por
pantalla.
o Si el departamento no existe debemos generar una excepción con dicho
mensaje
x 2-Modificar el programa anterior para incluir un parámetro de tipo OUT por el
que vaya el número de empleados afectados por la query. Debe ser visualizada
en el programa que llama a la función. De esta forma vemos que se puede usar
este tipo de parámetros también en una función
x 3-Crear una función llamada CREAR_REGION, donde se pase un nombre de
región que debe ser insertada en la tabla REGIONS y que devuelva un número.
o De forma automática debe calcular el código de región más alto, añadir 1
e insertar un registro con el nuevo número y l41.5mNrs0-4(4(n e)4(n una)] TJ4T11 0 0 1 15

7
BASES DE DATOS II

CREATE OR REPLACE PACKAGE BODY regiones IS


--FUNCIÓN EXISTE_REGION
FUNCTION existe_region ( id NUMBER,nombre VARCHAR2 ) RETURN
BOOLEAN IS
CURSOR c1 IS
SELECT
region_name,
region_id
FROM
regions;
y VARCHAR2(20);
BEGIN
FOR i IN c1 LOOP
IF
i.region_name = nombre AND i.region_id = id
THEN
RETURN true;
END IF;
END LOOP;
RETURN false;
END;
PROCEDURE alta_region ( codigo NUMBER,nombre VARCHAR2 ) IS
devuelto BOOLEAN;
BEGIN
devuelto := existe_region(codigo,nombre);
IF
devuelto = false
THEN
INSERT INTO regions ( region_id,region_name ) VALUES ( codigo,nombre );
dbms_output.put_line('Inserción correcta');
ELSE
dbms_output.put_line('La región ya existe.');
END IF;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('La ID YA EXISTE (duplicada)');
END;
--PROCEDURE BAJA_REGION
PROCEDURE baja_region ( id NUMBER ) IS
devuelto BOOLEAN;
otro VARCHAR2(20);
BEGIN
SELECT
region_name
INTO
otro
FROM
regions
WHERE
region_id = id;
devuelto := existe_region(id,otro);
IF
devuelto = true
THEN

11
BASES DE DATOS II

DELETE FROM regions WHERE


region_id = id;
dbms_output.put_line('Región con ID ' || id || ' borrada');
END IF;
EXCEPTION
WHEN no_data_found THEN
dbms_output.put_line('La región no existe!');
END;
--PROCEDURE MOD_REGION
PROCEDURE mod_region ( id NUMBER,nombre VARCHAR2 ) IS
devuelto BOOLEAN;
BEGIN
devuelto := existe_region(id,nombre);
IF
devuelto = true
THEN
UPDATE regions
SET
region_name = nombre
WHERE
region_id = id;
dbms_output.put_line('La región ha sido actualizada.');
ELSE
dbms_output.put_line('La región no existe.');
END IF;
END;
--FUNCIÓN CON_REGIOM
FUNCTION con_regiom ( codigo NUMBER ) RETURN VARCHAR2 IS
nombre_devolver VARCHAR2(20);
BEGIN
SELECT
region_name
INTO
nombre_devolver
FROM
regions
WHERE
region_id = codigo;
RETURN nombre_devolver;
END;
END regiones;
/
EXECUTE mod_region(7,'pikachutotal');
EXECUTE regiones.baja_region(10);
EXECUTE regiones.alta_region(10,'Prueba');
SELECT
*
FROM
regions;
DELETE FROM regions WHERE
region_id > 4;
ROLLBACK;

12
BASES DE DATOS II
BASES DE DATOS II

6. Práctica completa
18.1. Crear las tablas y datos necesarios
x creación_ddl.sql
se encuentra en los recursos del capítulo o bien podéis copiarlo y pegarlo de este
documento
FACTURAS
LINEAS_FACTURA
LOG_CONTROL
PRODUCTOS
x Las columnas de cada tabla con la siguientes:

COD_FACTURA NUMBER

FECHA DATE

DESCRIPCIÓN VARCHAR2(100)

x Clave primaria: COD_FACTURA

COD_PRODUCTO NUMBER

COD_FACTURA NUMBER

PVP NUMBER

UNIDADES NUMBER

FECHA DATE

x Clave Primaria: COD_FACTURA+COD_PRODUCTO


x Referencia a la tabla FACTURAS y a la tabla PRODUCTOS

COD_PRODUCTO NUMBER

NOMBRE_PRODUCTO VARCHAR2(100)

PVP NUMBER

17
Apasoft Training

TOTAL_VENDIDO NUMBER

x Clave primaria: COD_PRODUCTO

NUMBER
COD_EMPLEADO
DATE
FECHA
VARCHAR2(50)
TABLA_AFECTADA

COD_OPERACÍON CHAR(1)

x La columna COD_OPERACION debe valer:(I, U, D ˘ INSERT, UPDATE


,DELETE)

x Los scripts son los siguientes:


--------------------------------------------------------
-- DDL for Table LINEAS_FACTURA
--------------------------------------------------------

CREATE TABLE "HR"."LINEAS_FACTURA"

18
Apasoft Training

REM INSERTING into HR.PRODUCTOS


SET DEFINE OFF;
Insert into HR.PRODUCTOS
(COD_PRODUCTO,NOMBRE_PRODUCTO,PVP,TOTAL_VENDIDOS) values
('1','TORNILLO','1',null);
Insert into HR.PRODUCTOS
(COD_PRODUCTO,NOMBRE_PRODUCTO,PVP,TOTAL_VENDIDOS) values
('2','TUERCA','5',null);
Insert into HR.PRODUCTOS
(COD_PRODUCTO,NOMBRE_PRODUCTO,PVP,TOTAL_VENDIDOS) values
('3','ARANDELA','4',null);
Insert into HR.PRODUCTOS
(COD_PRODUCTO,NOMBRE_PRODUCTO,PVP,TOTAL_VENDIDOS) values
('4','MARTILLO','40',null);
Insert into HR.PRODUCTOS
(COD_PRODUCTO,NOMBRE_PRODUCTO,PVP,TOTAL_VENDIDOS) values
('5','CLAVO','1',null);

21
Apasoft Training

www.apasoft-training.com
[email protected] 22

También podría gustarte