Está en la página 1de 23

UNIDAD 2 - LENGUAJE DE PROCEDIMIENTOS PL/SQL

FASE 3 - IMPLEMENTACIÓN

PARTICIPANTES:
CC: 1.105.614.452 – LUIS EDUARDO OBANDO BONILLA
CC: 1.106.790.804 - ALEJANDRO GARZÓN CUELLAR
CC: XXXX - NOMBRE ESTUDIATNE 3
CC: XXXX - NOMBRE ESTUDIATNE 4
CC: 1.117.511.542 - CARLOS MAURICIO VARGAS CICERI

GRUPO No. 24

Tutor:
MARIANO ESTEBAN ROMERO

Universidad Nacional Abierta y a Distancia – UNAD


Escuela Ciencias básicas, tecnología e ingeniería
Programa Ingeniería de Sistemas
Base de datos avanzada 301125
Periodo 16-04
Colombia
2020
TABLA DE CONTENIDO
INTRODUCCIÓN.....................................................................................................................3
OBJETIVOS...............................................................................................................................4
RESULTADO.............................................................................................................................5
1. Selección y respuesta de la pregunta motivadora.....................................5
2. Activador o Disparadores....................................................................................6
3. Procedimientos Almacenados............................................................................6
4. Cursores....................................................................................................................7
5. Evidencias de la participación en el foro.......................................................8
CONCLUSIONES...................................................................................................................11
BIBLIOGRAFÍA......................................................................................................................12
INTRODUCCIÓN

La presente actividad compete a la fase 3 del curso de bases de datos


avanzado, en donde se evidenciará en los enfoques tanto conceptual
como practico, los elementos del lenguaje pl/slq de procedimientos,
disparadores y cursores.
OBJETIVOS

Objetivo General
Conocer e implementar en casos prácticos los significados, sintaxis y
utilidad de procedimientos almacenados, disparadores y cursores.

Objetivos Específicos
Consultar el significado de que son los procedimientos almacenados
así como dar ejemplos prácticos de los mismos.
Consultar el significado de que son los triggers o disparadores así
como dar ejemplos prácticos de los mismos.
Consultar el significado de que son los cursores y sus ejemplos
prácticos
RESULTADO

1. Selección y respuesta de la pregunta motivadora

Recuerde: que la respuesta debe ser un párrafo de su propia autoría


que contenga mínimo 200 palabras y máximo 300 palabras;
además, debe hacer un comentario a la respuesta de un

Nombre Estudiante 1: Elimine el texto y escriba el nombre


Pregunta 1: ¿Qué es un activador y cuáles son las principales
características?
Respuesta:

Comentario: …….
Autor del comentario:
Nombre Estudiante 2: Alejandro Garzón Cuellar
Pregunta 2: ¿Qué se conoce como procedimiento almacenado y cuál
es su principal función?
Respuesta:
Un procedimiento almacenado es un conjunto de instrucciones T-SQL
compiladas por
SQL Server en un único plan de ejecución. El llamado
"procedimiento almacenado" se
almacena en la base de datos y se puede ejecutar en cualquier
momento.
Cuando un procedimiento almacenado se ejecuta por primera vez,
su plan de ejecución
se creará y almacenará en la memoria, y luego SQL usará el plan de
ejecución cuando
vuelva a llamar al procedimiento sin tener que volver a compilarlo.
Es ejecutado directamente en el motor de bases de datos, el cual
usualmente corre en un
servidor separado. Como tal, posee acceso directo a los datos que
necesita manipular y
sólo necesita enviar sus resultados de regreso al usuario.
El proceso puede ser beneficioso: cuando se manipula la base de
datos desde muchos
programas externos. Al utilizar procedimientos almacenados para
incluir la lógica de la
aplicación en la base de datos, puede reducir la necesidad de
incrustar la misma lógica
en todos los programas que acceden a los datos.
Funciones y características
Los procedimientos almacenados se utilizan para agrupar sentencias
T-SQL y cualquier
lógica asociada necesaria para realizar tareas.
Puede utilizar los siguientes cuatro métodos para crear un
procedimiento almacenado:
Transact-SQL (T-SQL).
Administrador empresarial de SQL Server.
Asistente para la creación de procedimientos almacenados.
Objeto de administración distribuida SQL
Comentario: Como solución al punto 3 de la guía de actividades me
permito realizar breve pero significativo complemento a contribuir
con la solución a la pregunta del compañero Alejandro Garzon:

Los procedimientos también son vistos como módulos de programa


almacenados en el servidor del sistema que se esté utilizando como
gestor de bases de datos.

Para poder escribir procedimientos almacenados se requieren de una


serie de estructuras de programación de propósito general incluidas
en SQL con algunas extenciones llamadas SQL/PSM, lo que amplía al
ya visto lenguaje SQL con estructuras de programación tales como
sentencias, condicionales o bucles.
Autor del comentario: Luis Eduardo Obando Bonilla
Nombre Estudiante 3: Luis Eduardo Obando Bonilla
Pregunta 3: ¿Qué son cursores y cuál es la importancia de su uso?

Respuesta:
Los cursores son estructuras de control que se usan para recuperar y
procesar filas de una relación en una de determinada consulta. Estos
examinan desde un lenguaje de programación la colección de filas
resueltas por lo general en un SELECT hecho a través del lenguaje
SQL en determinado sistema gestor de base de datos.

Estos son requeridos debido a que los lenguajes de programación no


suelen disponer de mecanismos propios para manejar los datos con
una sola instrucción, por lo que disponemos de mecanismos que
permitan iterar y procesar entre filas de información
secuencialmente dentro del set de resultados.

Dentro de las sentencias SQL que no requieren del uso de cursores


están la sentencia INSERT, UPDATE y DELETE, aunque se dice que
en algunos puntos muy específicos se puede hacer algún uso en las
últimas dos, así las cosas los cursores son implementados
comúnmente para realizar consultas con la sentencia SELECT
siempre y cuando esta no incluyan un INTO, pues esto reduce el
numero de resultados a una fila, por lo que el uso de un cursor no
tendría sentido al no haber un grupo de filas a recorrer
secuencialmente.

Para crear un cursor se utiliza la sentencia DECLARE de la siguiente


manera:

DECLARE nombre_del_cursor CURSOR FOR SELECT... FROM...

Antes de poder ser utilizado el cursor debe ser abierto por medio de
la sentencia OPEN, luego este se posiciona en el set de resultados
con la sentencia FETCH y al final se cierra con la sentencia CLOSE.

Comentario:
Como solución al punto 3 de la guía de actividades me permito
realizar breve complemento a contribuir con la solución a la
pregunta del compañeros Luis Eduardo:

Siguiendo la idea del compañero. En otras palabras, los cursores


son un recurso más que ofrecen algunos SGBD como parte del set
de instrucciones que se pueden usar en procedimientos
almacenados.

Yo personalmente pienso que son de gran utilidad para el


procesamiento registro a registro del resultado de una consulta. El
porque hacerlo mediante un cursor y no directamente sobre una
consulta depende fundamentalmente de la naturaleza del problema,
de las preferencias del desarrollador, de problemas de rendimiento,
de preferir un código mejor estructurado, etc...

Autor del comentario: Alejandro Garzón Cuellar


Nombre Estudiante 4: Elimine el texto y escriba el nombre
Pregunta 4: ¿Cuál es la diferencia entre activadores, procedimientos
almacenados y cursores?
Respuesta:

Comentario: …….
Autor del comentario:
Nombre Estudiante 5: Carlos Mauricio Vargas Ciceri
Pregunta 5: ¿Qué se conoce como lenguaje PL/SQL y cuál es su
diferencia del lenguaje SQL?
Respuesta:
SQL es el estándar del lenguaje aceptado por la ISO y ANSI, la mayoría si no todos los
motores relacionales de base de datos usan SQL.
El motor de Oracle usa SQL, PL\SQL es una extensión del lenguaje SQL desarrollado
por Oracle para poder hacer cosas que el estándar no puede realizar.
Este caso también aplica para el motor SQL de Microsoft, Microsoft SQL server
utiliza SQL y su extensión desarrollada por Microsoft, llamada T-SQL (Transact-
SQL). Los demás motores de SQL si no la mayoría cuentan con una pequeña extensión
del lenguaje SQL desarrollada por la empresa que desarrollan el motor.

Comentario: …….
Autor del comentario:

2. Activador o Disparadores
Nombre del estudiante 1: Luis Eduardo Obando Bonilla
Código: El trigger permitirá tener control cada que se elimine un una
tabla de nuestra base de datos:
1. Creamos una tabla en la que llevaremos el control:

CREATE TABLE CONTROL_LOG


(
EVENTO VARCHAR2 (100),
FECHA DATE DEFAULT SYSDATE);

2. Ahora creamos el TRIGGER que se disparará después del DROP


sobre la tabla:

CREATE OR REPLACE TRIGGER BORRAR_OBJETO


AFTER DROP
ON SCHEMA
BEGIN
INSERT INTO CONTROL_LOG (EVENTO) VALUES ('EL OBJETO HA
SIDO ELIMINADO');
END;
3. Creamos la tabla que vamos a eliminar para que se dispare el
trigger:

CREATE TABLE PRUEBA (CODIGO NUMBER);

4. Ahora la vamos a eliminar y comprobaremos la tabla CONTROL


LOG para verificar que se haya disparado nuestro evento:

DROP TABLE PRUEBA;

Verificamos en el resultado de abajo el resultado de la consulta en la


tabla CONTROL LOG luego de consultarla:

SELECT * FROM CONTROL_LOG;

Resultado de la consulta:
Nombre del estudiante 2: Alejandro Garzon Cuellar
Código:
CREATE OR REPLACE TRIGGER MI_PT_UNAD
BEFORE
INSERT
ON NOMINA_2

FOR EACH ROW

BEGIN
SELECT MI_P_SEQ1.NEXTVAL
INTO :NEW.EMPLOYEE_ID
FROM DUAL;
END;
SELECT
EMPLOYEE_ID,
FIRST_NAME,
LAST_NAME,
SALARY
FROM
UNAD_NAL_134.NOMINA_2;
Resultado de la consulta:

Nombre del estudiante 3: Elimine el texto y escriba el nombre


Código:

Resultado de la consulta:
Nombre del estudiante 4: Elimine el texto y escriba el nombre
Código:

Resultado de la consulta:

Nombre del estudiante 5: Carlos Mauricio Vargas Ciceri


Código:

--CREAR LA SECUENCIA PARA EL TRIGGER

DECLARE
V_FK NUMBER;

BEGIN
V_FK:= SEQ1.NEXTVAL;
DBMS_OUTPUT.PUT_LINE(V_FK);

END;

--CREAR TRIGGER

CREATE OR REPLACE TRIGGER TRIGER_MAURICIO_VARGAS


BEFORE
INSERT
ON NOMINA_2
FOR EACH ROW
BEGIN
SELECT SEQ1.NEXTVAL
INTO : NEW.EMPLOYEE_ID
FROM DUAL;
END;

--INSERTAR LOS DATOS

INSERT INTO UNAD_NAL_135.NOMINA_2 (


--EMPLOYEE_ID,
FIRST_NAME,
LAST_NAME,
SALARY
) VALUES (
-- :EMPLOYEE_ID,
:FIRST_NAME,
:LAST_NAME,
:SALARY
);

--CONSULTAR LA TABLA
SELECT
EMPLOYEE_ID,
FIRST_NAME,
LAST_NAME,
SALARY
FROM
UNAD_NAL_135.NOMINA_2;
Resultado de la consulta:

3. Procedimientos Almacenados
Nombre del estudiante 1: Luis Eduardo Obando Bonilla
CREATE OR REPLACE PROCEDURE PROCEDIMIENTO_UNAD

AS
--declare --declaramos las variables donde irán los datos de la
consulta para el algoritmo
quincena number (10.2);
nombre varchar (30);
apellido varchar (30);
salario varchar (30);
anualidad varchar (30);

begin
--colocamos las sentencias
select FIRST_NAME, LAST_NAME, SALARY
into nombre, apellido, salario
from IBO.EMPLOYEES
where EMPLOYEE_ID = 100;

--ahora programamos:
quincena:= salario/2;
anualidad:= salario*12;
DBMS_OUTPUT.PUT_LINE (nombre || ' '||apellido||' '||'Tiene un
salario mensual de '|| salario);
DBMS_OUTPUT.PUT_LINE ('La quincena es:' || ' ' || quincena);--
paraquete para imprimir el resultado
DBMS_OUTPUT.PUT_LINE ('La anualidad es:' || ' ' || anualidad);
end;

EXECUTE PROCEDIMIENTO_UNAD

Resultado de la consulta:

Nombre del estudiante 2: Alejandro Garzón Cuellar


Código:
CREATE OR REPLACE PROCEDURE PP_TF_134 (P_CODIGO IN
NUMBER) RETURN DATE
AS
V_FECHA_ING DATE;
BEGIN
SELECT HIRE_DATE
INTO V_FECHA_ING
FROM IBO.EMPLOYEES
WHERE EMPLOYEE_ID = P_CODIGO;
RETURN V_FECHA_ING;
END;

-------------------

SELECT HIRE_DATE
FROM IBO.EMPOYEES
WHERE EMPLOYEE_ID = 120

-----------------------
SELECT EMPLOYEE_ID, FIRST_NAME, LAS_NAME, SALARY,
PP_TF_134 (EMPLOYEE_ID), HIRE_DATE
FROM IBO.EMPOYEES
Resultado de la consulta:

Nombre del estudiante 3: Elimine el texto y escriba el nombre


Código:

Resultado de la consulta:

Nombre del estudiante 4: Elimine el texto y escriba el nombre


Código:

Resultado de la consulta:

Nombre del estudiante 5: Carlos Mauricio Vargas Ciceri


Código:

CREATE OR REPLACE EDITIONABLE PROCEDURE


"UNAD_NAL_135"."PROCEDIMIENTO_ING_MAURICIO_VARGAS"
AS
V_QUINCENA NUMBER(10,2);
V_NOMBRE VARCHAR(30);
V_APELLIDO VARCHAR(30);
V_SALARIO VARCHAR(30);
BEGIN

-- Sentencias SQL
SELECT FIRST_NAME,LAST_NAME,SALARY
INTO V_NOMBRE,V_APELLIDO,V_SALARIO
FROM IBO.EMPLOYEES
WHERE EMPLOYEE_ID = 100;

V_QUINCENA := V_SALARIO/2;

-- Imprimimos

DBMS_OUTPUT.PUT_LINE( V_NOMBRE || ' ' || V_APELLIDO || ' ' ||


V_SALARIO);
DBMS_OUTPUT.PUT_LINE( 'lA QUINCENA ES DE :' ||
V_QUINCENA);
END;
/

Resultado de la consulta:

4. Cursores
Nombre del estudiante 1: Elimine el texto y escriba el nombre
Código: En este caso el cursor se ubicará y devolverá según la
función si es 1 en el nombre del empleado, y sino se irá hacia el dato
de la tabla departamento:

Primero creamos el paquete PAQ1:

CREATE OR REPLACE PACKAGE PAQ1


AS
TYPE C_VARIABLE IS REF CURSOR;
FUNCTION DEVOLVER_DATOS(C1 IN OUT C_VARIABLE ,X
NUMBER) RETURN VARCHAR2;
END;

Ahora creamos el package body en donde consultaremos las tablas


employees y departments según el numero de empleado si es 1 el
cursor irá y retornará el nombre o si es diferente de 1 retornará el
departamento:

CREATE OR REPLACE PACKAGE BODY PAQ1 AS


FUNCTION DEVOLVER_DATOS (C1 IN OUT C_VARIABLE ,X
NUMBER) RETURN VARCHAR2
IS
DEPARTAMENTOS DEPARTMENTS%ROWTYPE;
EMPLEADOS EMPLOYEES%ROWTYPE;
BEGIN
IF X=100 THEN
OPEN C1 FOR SELECT * FROM IBO.EMPLOYEES;
FETCH C1 INTO EMPLEADOS;
RETURN EMPLEADOS.FIRST_NAME;

ELSE
OPEN C1 FOR SELECT * FROM IBO.DEPARTMENTS;
FETCH C1 INTO DEPARTAMENTOS;
RETURN DEPARTAMENTOS.DEPARTMENT_NAME;
END IF;
END;
END;

Luego con un bloque anónimo imprimimos el resultado del cursor:

SET SERVEROUTPUT ON

DECLARE
DATOS PAQ1.C_VARIABLE;
BEGIN
DBMS_OUTPUT.PUT_LINE(PAQ1.DEVOLVER_DATOS(DATOS,100));
END;

Ahora si cambiamos el 100 por otro número como el 2 obtendremosel


nombre de un departamento:
SET SERVEROUTPUT ON

DECLARE
DATOS PAQ1.C_VARIABLE;
BEGIN
DBMS_OUTPUT.PUT_LINE(PAQ1.DEVOLVER_DATOS(DATOS,2));
END;
Resultado de la consulta:
Si es el id 100

Sino es el id 100

Nombre del estudiante 2: Alejandro Garzón Cuellar


Código:

Resultado de la consulta:

Nombre del estudiante 3: Elimine el texto y escriba el nombre


Código:

Resultado de la consulta:

Nombre del estudiante 4: Elimine el texto y escriba el nombre


Código:

Resultado de la consulta:

Nombre del estudiante 5: Carlos Mauricio Vargas Ciceri


Código:

--CURSORES

EXECUTE NOMINA_EMPLEADOS;

DECLARE

CURSOR C1 IS
SELECT EMPLOYEE_ID, FIRST_NAME FROM NOMINA_2;
--DECLARAR VARIALBLES

V_ID NOMINA_2.EMPLOYEE_ID% TYPE;


V_NOMBRE NOMINA_2.FIRST_NAME% TYPE;

BEGIN
OPEN C1;
LOOP
FETCH C1 INTO V_ID, V_NOMBRE;

-- IMPRIMIMOS

DBMS_OUTPUT.PUT_LINE(V_ID || ' ' || V_NOMBRE);


EXIT WHEN C1%NOTFOUND;
END LOOP;
CLOSE C1;
END;

Resultado de la consulta:
5. Evidencias de la participación en el foro
Se espera que cada estudiante presente las evidencias de su
participación en el foro con relación al Desarrollo Unidad 2 - Fase 3 -
Implementación, al igual que comentarios significativos a los aportes
de los demás compañeros del grupo.

Nombre Estudiante 1: Elimine el texto y escriba el nombre


Imagen 1 Imagen 2

Nombre Estudiante 2: Alejandro Garzón Cuellar


Imagen 1 Imagen 2

Nombre Estudiante 3: Elimine el texto y escriba el nombre


Imagen 1 Imagen 2
Nombre Estudiante 4: Elimine el texto y escriba el nombre
Imagen 1 Imagen 2

Nombre Estudiante 5: Carlos Mauricio Vargas Ciceri


Imagen 1 Imagen 2
CONCLUSIONES

Conclusión por Luis Eduardo Obando Bonilla:


La presente actividad no solo me permitió aprender conceptualmente
que son y para que sirven los cursores, disparadores y
procedimientos dentro del lenguaje PL/SQL, sino además me permitió
usar estos elementos en diferentes casos prácticos integrando lo visto
en las fases anteriores del curso mientras se realizaban consultas o
incluso creaban y borraban tablas con las sentencias básicas de sql.
BIBLIOGRAFÍA

Cerra Escobar I,L (2021) Web académica Fase 3 Implementación


Base de datos avanzada [Archivo de video] Recuperado de
https://youtu.be/vOn9e4dEn6w
Cerra Escobar I,L (2021) CIPAS Base de Dados Avanzada - Pl/SQL
[Archivo de video] Recuperado de https://youtu.be/4epWYzI2EsM
Apasoft Training (2019) Curso Oracle PL/SQL avanzado: CREAR
TRIGGER DDL [Archivo de video] Recuperado de
https://youtu.be/Zbi7bIJllQk
Apasoft Training (2019) Curso Oracle PL/SQL avanzado: REF
CURSORS en funciones [Archivo de video] Recuperado de
https://youtu.be/cDFv0IjdJfU

También podría gustarte