Unidad 3:implementación de La Base de Datos - PL/SQL. Tema: PL/SQL - Básico. PL/SQL - Intermedio
Unidad 3:implementación de La Base de Datos - PL/SQL. Tema: PL/SQL - Básico. PL/SQL - Intermedio
Unidad 3:implementación de La Base de Datos - PL/SQL. Tema: PL/SQL - Básico. PL/SQL - Intermedio
• Tema:
✓ PL/SQL – Básico.
✓ PL/SQL – Intermedio.
✓ PL/SQL – Avanzado
✓ Triggers
✓ Directorios, Procedimientos Almacenados
• Ciclo: IV
• Semestre: 2022-2
Al finalizar la unidad, el/la estudiante implementa una base de datos
usando adecuadamente los fundamentos de normalización, modelo
Entidad – Relación, diseño lógico y el lenguaje de programación PLSQL
para lograr el acopio y la organización de la información.
PL/SQL – Básico.
Conocimientos previos
En Mentimeter escribe los conceptos claves sobre el
lenguaje PL / SQL – Básico.
10 minutos
www.menti.com
Recuperado de: https://www.muycomputerpro.com/wp-content/uploads/2014/10/desarrollo_software.jpg
PL/SQL – Funciones
SINTAXIS
CREATE OR REPLACE FUNCTION [esquema].nombre-funcion
(nombre-parámetro IN tipo-de-dato, ..)
RETURN tipo-de-dato {IS, AS}
Declaración de variables;
Declaración de constantes;
Declaración de cursores;
BEGIN
Cuerpo del subprograma PL/SQL;
EXCEPTION
Bloque de excepciones PL/SQL;
END;
EJEMPLO
create or replace function f_incremento10 (avalor number) return number is
begin
return avalor+(avalor*0.1);
end; /
PL/SQL – Procedimientos
SINTAXIS EJEMPLO
CREATE OR REPLACE PROCEDURE
CREATE OR REPLACE PROCEDURE procedimiento1 (a IN NUMBER, b IN OUT NUMBER)
IS
[esquema].nombre-procedim vmax NUMBER;
(nombre-parámetro {IN, OUT, IN OUT} tipo de BEGIN
dato, ..) {IS, AS} SELECT salario, maximo
INTO b, vmax
Declaración de variables; FROM empleados
Declaración de constantes; WHERE empleado_id=a;
IF b < vmax THEN
Declaración de cursores; b:=b+100;
BEGIN END IF;
Cuerpo del subprograma PL/SQL; EXCEPTION
WHEN NO_DATA_FOUND THEN
EXCEPTION b:=-1;
Bloque de excepciones PL/SQL; RETURN;
WHEN OTHERS THEN
END; RAISE;
END;
PL/SQL – Package
SINTAXIS CREATE [OR REPLACE] PACKAGE BODY <nombre_del_paquete> IS
-- Declaraciones de tipos y registros privados
TYPE <TypeName> IS <tipo>;
CREATE [OR REPLACE] PACKAGE <nombre_del_paquete> is -- Declaraciones de variables y constantes privadas
-- Declaración de tipos: <nombreConstante> CONSTANT <tipo> := <valor>;
TYPE <nombreTipo> IS <tipo>; <nombreVariable> <tipo>;
-- Declaracion de variables y constantes -- Implementacion de procedimientos y funciones
<nombreConstante> CONSTANT <tipo> := <valor>; FUNCTION <nombreFuncion>(<parametro> <tipo>,...) RETURN <tipo> IS
-- Variables locales de la funcion
<nombreVariable> <tipo>; BEGIN
-- Declaraciones de funciones y procedimientos -- Implementación de la función
return <resultado>;
FUNCTION <nombreFuncion>(<parametro> <tipo>,...) RETURN [EXCEPTION]
<tipo>; -- Control de excepciones
END;
PROCEDURE <nombreProcedimiento>(<parametro> <tipo>, ...);
END <nombre_del_paquete> PROCEDURE <nombreProcedimiento>(<parametro> <tipo>, ...) IS
-- Variables locales del procedimiento
BEGIN
-- Implementacion de procedimiento
[EXCEPTION]
-- Control de excepciones
END;
END <nombre_del_paquete>;
PL/SQL – Package
CREATE OR REPLACE PACKAGE IDOFISCALIZACION.CZPK_EJEMPLO01 IS
/*************************************************************************/
-- Autor : César Zavaleta
-- Version : 1.4
-- Descripcion : Package donde se obtienen valores y se actualizan datos para la ejecución de las opciones del aplicativo de Microformas
-- usuario: czavaleta
-- cambio: ..2013 - Pase a Producción
-- Fecha Modificado por Revisado por Visado por Descripcion del Cambio
-- ========== ============== ============ ==========
-- 14/11/2013 Cesar Zavaleta Se adicionaron las funciones FIND_MASTER_TABLE, DESCARGA_ACTAS, CARGA_FIRMAS, GENERA_DIS
--************************************************************************
TYPE EmpCurTyp IS REF CURSOR RETURN HR.EMPLOYEES%ROWTYPE;
--FUNCTION SELECCIONA_ACTAS(PNU_MUESTRA FITM_USUARIO.CO_USUARIO%TYPE) RETURN NUMBER;
PROCEDURE CZSP_INDEX_BY_TABLES01;
PROCEDURE CZSP_INDEX_BY_TABLES02;
PROCEDURE CZSP_INDEX_BY_TABLES03;
PROCEDURE CZSP_INDEX_BY_TABLES04;
PROCEDURE CZSP_OPERACIONES(N1 number, N2 number);
PROCEDURE CZSP_DIA_LETRAS(VL_NDIA number);
PROCEDURE CZSP_IF;
PROCEDURE CZSP_WHEN;
PROCEDURE CZSP_LOOP;
PROCEDURE CZSP_WHILE;
PROCEDURE CZSP_FOR;
PROCEDURE CZSP_CURSOR_FOR;
PROCEDURE CZSP_CURSOR_FOR01;
PROCEDURE CZSP_CURSOR_WHILE;
PROCEDURE CZSP_CURSOR_WHILE01;
PROCEDURE CZSP_CURSOR_FOR02;
PROCEDURE CZSP_CURSOR_TYPE;
PROCEDURE CZSP_CURSOR_BULK_COLLECT;
PROCEDURE CZSP_CURSOR_BULK_COLLECT01;
PROCEDURE CZSP_SQL_DINAMICO;
PROCEDURE CZSP_SQL_EXCEPTION;
PROCEDURE CZSP_UPDATE;
PROCEDURE CZSP_SQL_CURSOR;
PROCEDURE CZSP_SQL_FOR_USING;
PROCEDURE CZSP_OPEN_FOR (emp_cv IN OUT EmpCurTyp, choice IN INT);
PROCEDURE CZSP_OPEN;
PROCEDURE CZSP_MERGE;
PROCEDURE CZSP_COLLECTION;
PROCEDURE CZSP_DATE(RPTA OUT DATE);
END CZPK_EJEMPLO01;
PL/SQL – Package
CREATE OR REPLACE PACKAGE IDOFISCALIZACION.CZPK_EJEMPLO01 IS
/*************************************************************************/
-- Autor : César Zavaleta
-- Version : 1.4
-- Descripcion : Package donde se obtienen valores y se actualizan datos para la ejecución de las opciones del aplicativo de Microformas
-- usuario: czavaleta
-- cambio: ..2013 - Pase a Producción
-- Fecha Modificado por Revisado por Visado por Descripcion del Cambio
-- ========== ============== ============ ==========
-- 14/11/2013 Cesar Zavaleta Se adicionaron las funciones FIND_MASTER_TABLE, DESCARGA_ACTAS, CARGA_FIRMAS, GENERA_DIS
--************************************************************************
TYPE EmpCurTyp IS REF CURSOR RETURN HR.EMPLOYEES%ROWTYPE;
--FUNCTION SELECCIONA_ACTAS(PNU_MUESTRA FITM_USUARIO.CO_USUARIO%TYPE) RETURN NUMBER;
PROCEDURE CZSP_INDEX_BY_TABLES01;
PROCEDURE CZSP_INDEX_BY_TABLES02;
PROCEDURE CZSP_INDEX_BY_TABLES03;
PROCEDURE CZSP_INDEX_BY_TABLES04;
PROCEDURE CZSP_OPERACIONES(N1 number, N2 number);
PROCEDURE CZSP_DIA_LETRAS(VL_NDIA number);
PROCEDURE CZSP_IF;
PROCEDURE CZSP_WHEN;
PROCEDURE CZSP_LOOP;
PROCEDURE CZSP_WHILE;
PROCEDURE CZSP_FOR;
PROCEDURE CZSP_CURSOR_FOR;
PROCEDURE CZSP_CURSOR_FOR01;
PROCEDURE CZSP_CURSOR_WHILE;
PROCEDURE CZSP_CURSOR_WHILE01;
PROCEDURE CZSP_CURSOR_FOR02;
PROCEDURE CZSP_CURSOR_TYPE;
PROCEDURE CZSP_CURSOR_BULK_COLLECT;
PROCEDURE CZSP_CURSOR_BULK_COLLECT01;
PROCEDURE CZSP_SQL_DINAMICO;
PROCEDURE CZSP_SQL_EXCEPTION;
PROCEDURE CZSP_UPDATE;
PROCEDURE CZSP_SQL_CURSOR;
PROCEDURE CZSP_SQL_FOR_USING;
PROCEDURE CZSP_OPEN_FOR (emp_cv IN OUT EmpCurTyp, choice IN INT);
PROCEDURE CZSP_OPEN;
PROCEDURE CZSP_MERGE;
PROCEDURE CZSP_COLLECTION;
PROCEDURE CZSP_DATE(RPTA OUT DATE);
END CZPK_EJEMPLO01;
PL/SQL - Package
CREATE OR REPLACE PACKAGE BODY IDOFISCALIZACION.CZPK_EJEMPLO01 IS
PROCEDURE CZSP_DATE(RPTA OUT DATE) IS
BEGIN
RPTA:=SYSDATE();
END;
END CZPK_EJEMPLO01;
/
PL/SQL – Package
PROCEDURE CZSP_INDEX_BY_TABLES01 IS
TYPE PAISES IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
ARRAY_PAISES PAISES;
BEGIN
ARRAY_PAISES(1):=1;
ARRAY_PAISES(2):=2;
ARRAY_PAISES(3):=3;
FOR i IN ARRAY_PAISES.FIRST..ARRAY_PAISES.LAST
LOOP
dbms_output.put_line(ARRAY_PAISES(i));
END LOOP;
END;
PL/SQL – Package
PROCEDURE CZSP_INDEX_BY_TABLES02
IS
TYPE PAISES IS TABLE OF VARCHAR2(60) INDEX BY
BINARY_INTEGER;
ARRAY_PAISES PAISES;
BEGIN
ARRAY_PAISES(1):='CESAR';
ARRAY_PAISES(2):='YASETT';
ARRAY_PAISES(3):='KIARA';
FOR i IN
ARRAY_PAISES.FIRST..ARRAY_PAISES.LAST
LOOP
dbms_output.put_line(ARRAY_PAISES(i));
END LOOP;
END;
PL/SQL – Package
PROCEDURE CZSP_INDEX_BY_TABLES02 IS
TYPE PAISES IS TABLE OF VARCHAR2(60) INDEX BY BINARY_INTEGER;
ARRAY_PAISES PAISES;
BEGIN
ARRAY_PAISES(1):='CESAR';
ARRAY_PAISES(2):='YASETT';
ARRAY_PAISES(3):='KIARA';
FOR i IN ARRAY_PAISES.FIRST..ARRAY_PAISES.LAST
LOOP
dbms_output.put_line(ARRAY_PAISES(i));
END LOOP;
END;
PL/SQL – Package
PROCEDURE CZSP_INDEX_BY_TABLES03 IS
TYPE PAIS IS RECORD
(
CO_PAIS NUMBER,
DESCRIPCION VARCHAR2(50),
CONTINENTE VARCHAR2(20)
);
TYPE PAISES IS TABLE OF PAIS INDEX BY BINARY_INTEGER ;
ARRAY_PAISES PAISES;
BEGIN
ARRAY_PAISES(1).CO_PAIS := 27;
ARRAY_PAISES(1).DESCRIPCION := 'ITALIA';
ARRAY_PAISES(1).CONTINENTE := 'EUROPA';
ARRAY_PAISES(3).CO_PAIS := 20;
ARRAY_PAISES(3).DESCRIPCION := 'PERU';
ARRAY_PAISES(3).CONTINENTE := 'AMERICA';
FOR i IN ARRAY_PAISES.FIRST..ARRAY_PAISES.LAST
LOOP
IF ARRAY_PAISES.EXISTS(i) THEN
dbms_output.put_line(ARRAY_PAISES(i).CO_PAIS);
dbms_output.put_line(ARRAY_PAISES(i).DESCRIPCION);
dbms_output.put_line(ARRAY_PAISES(i).CONTINENTE);
ELSE
dbms_output.put_line('El elemento no existe:'||TO_CHAR(i));
END IF;
END LOOP;
dbms_output.put_line( 'El número de elementos es:'||ARRAY_PAISES.COUNT);
dbms_output.put_line( 'El elemento previo a 3 es:' || ARRAY_PAISES.PRIOR(3));
dbms_output.put_line( 'El elemento siguiente es:' || ARRAY_PAISES.NEXT(1));
END;
PL/SQL – Package
PROCEDURE CZSP_INDEX_BY_TABLES04 IS
TYPE NumList IS TABLE OF NUMBER;
ANU NumList := NumList(10, 20, 30, 40);
--TYPE PairTab IS TABLE OF Pair;
--pairs PairTab := PairTab(Pair(1,2), Pair(3,4), Pair(5,6));
BEGIN
FOR I IN 1 .. 4 LOOP
DBMS_OUTPUT.PUT_LINE(ANU(I));
END LOOP;
--FORALL i in 1..3 UPDATE coords SET (x, y) = (pairs(i).m, pairs(i).n) WHERE x = nums(i);
END;
PL/SQL – Package
PROCEDURE CZSP_OPERACIONES(N1 number, N2 number) IS
BEGIN
dbms_output.put_line('Suma ' || (N1 + N2));
dbms_output.put_line('Resta ' || (N1 - N2));
dbms_output.put_line('Multiplicación ' || (N1 * N2));
dbms_output.put_line('División ' || (N1 / N2));
dbms_output.put_line('Potencia ' || (N1 ** N2));
END;
PL/SQL – Package
PROCEDURE CZSP_DIA_LETRAS(VL_NDIA number) IS
BEGIN
IF VL_NDIA=1 THEN
DBMS_OUTPUT.PUT_LINE('LUNES');
ELSIF VL_NDIA=2 THEN
DBMS_OUTPUT.PUT_LINE('MARTES');
ELSIF VL_NDIA=3 THEN
DBMS_OUTPUT.PUT_LINE('MIERCOLES');
ELSIF VL_NDIA=4 THEN
DBMS_OUTPUT.PUT_LINE('JUEVES');
ELSIF VL_NDIA=5 THEN
DBMS_OUTPUT.PUT_LINE('VIERNES');
ELSIF VL_NDIA=6 THEN
DBMS_OUTPUT.PUT_LINE('SABADO');
ELSE
DBMS_OUTPUT.PUT_LINE('DOMINGO');
END IF;
END;
Ejercicio
Crear y ejecutar sentencias a solicitud de
documento indicado por el mentor.
60 minutos
Conclusiones
• El PLSQL es un lenguaje que permite una mejor manipulación de la base de
datos ORACLE. Explique.
• Las funciones, procedimientos y paquetes de PLSQL se diferencian en su uso
Justifique.
• ¿Es PLSQL un lenguaje estructurado?
¿Qué has aprendido en la Sesión?
Logro de la sesión:
Créditos: