Está en la página 1de 8

Bases de Datos Universidad Mesoamericana

MSc. Ing. Jos Luis Hernndez


Con respecto al proyecto
Diseo de la base de datos
o Normalizacin (primeras 3 formas normales)
o Desnormalizacin (cuando sea necesaria)
o Modelo ER y Modelo ER-E
Comparacin de Gestores de base de datos
o SQL Server
o MySQL
o Oracle
o DB2 IBM
o Postgre
o Mondo DB
o Etc.
Tcnica de programacin
o POO
o 3 Capas y N Capas
o Entity Framework (java JPA)
o MVC
o Singleton
o Etc.

PL/SQL
o Introduccin
o Caractersticas
o Arquitectura
o Bloques
o Consultas
o Manejo de excepciones
o Programas almacenados (Procedimientos, funciones, etc.)

PL/ SQL
o Es un lenguaje de programacin procedimental.
o Los programas de almacenan en la base de datos como un objeto
ms.
o Estructuras de control (selectivas y repetitivas).
o Est integrado con el servidor de Oracle.
Bases de Datos Universidad Mesoamericana
MSc. Ing. Jos Luis Hernndez
o La traduccin se hace de forma interpretada (Pasa por un analizador
sintctico y lexicogrfico).

o La unidad de trabaja es en bloque.

Ejemplo:
Bloque annimo: porcin de cdigo en Oracle. Pero Oracle no conoce su
definicin antes de ser copilado.
BEGIN
DBMS_OUTPUT.PUT_LINE('BASE DE DATOS 3');
END;

Sintaxis General de un Bloque


DECLARE
--Esta seccin es opcional
--Contiene todas las variables, constantes, cursores, excepciones que se desean
definir
BEGIN
--Seccin obligatoria
--Contiene todas las instrucciones que se desean ejecutar
EXCEPTION
--Esta seccin es opcional
--Captura los errores que se puedan dar en el cuerpo de BEGIN
Bases de Datos Universidad Mesoamericana
MSc. Ing. Jos Luis Hernndez
END;

Ejemplo2:
DECLARE
totalEmpleados number(10);
BEGIN
SELECT COUNT(*) INTO totalEmpleados FROM EMPLOYEES;
DBMS_OUTPUT.PUT_LINE('TOTAL DE EMPLEADOS: '||totalEmpleados);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('ERROR AL EJECUTAAR LA
CONSULTA');
END;

Procedimientos y Funciones

Los procedimientos y funciones Oracle estn compuestos por una parte en la que
se definen de variables y cursores, otra parte ejecutable compuesta por sentencias
SQL y PLSQL, y otra parte opcional enfocada a manejar las excepciones y errores
ocurridos durante la ejecucin.

En Oracle no se puede recuperar un conjunto de resultados utilizando solamente la


sentencia select * from Tabla. Esto se logra utilizando el tipo de datos REF
CURSOR, por tanto se debe definir un parmetro de salida CURSOR REF en el
procedimiento para pasar el cursor de nuevo a su aplicacin (o programa que lo
invoca).

Sintaxis de un procedimiento PLSQL:

CREATE OR REPLACE PROCEDURE [esquema].nombre-procedimiento


(nombre-parmetro {IN, OUT, IN OUT} tipo de dato, ) {IS, AS}
Bases de Datos Universidad Mesoamericana
MSc. Ing. Jos Luis Hernndez
Declaracin de variables;
Declaracin de constantes;
Declaracin de cursores;
BEGIN
Cuerpo del subprograma PL/SQL;
EXCEPTION
Bloque de excepciones PL/SQL;
END;

Sintaxis de una funcin PLSQL:

CREATE OR REPLACE FUNCTION [esquema].nombre-funcion


(nombre-parmetro {IN, OUT, IN OUT} tipo-de-dato, ..)
RETURN tipo-de-dato {IS, AS}
Declaracin de variables;
Declaracin de constantes;
Declaracin de cursores;
BEGIN
Cuerpo del subprograma PL/SQL;
EXCEPTION
Bloque de excepciones PL/SQL;
END;

Aclaraciones sobre la sintaxis:

Nombre-parmetro: es el nombre que nosotros queramos dar al parmetro.


Podemos utilizar mltiples parmetros. En caso de no necesitarlos podemos omitir
los parntesis.

IN: especifica que el parmetro es de entrada y que por tanto dicho parmetro tiene
que tener un valor en el momento de llamar a la funcin o procedimiento. Si no se
Bases de Datos Universidad Mesoamericana
MSc. Ing. Jos Luis Hernndez
especifica nada, los parmetros son por defecto de tipo entrada.

OUT: especifica que se trata de un parmetro de salida. Son parmetros cuyo valor
es devuelto despus de la ejecucin el procedimiento al bloque PL/SQL que lo
llam. Las funciones PLSQL no admiten parmetros de salida.

IN OUT: Son parmetros de entrada y salida a la vez.

AS: Indica que despus es el inicio del procedimiento.

Ejemplo:
create or replace PROCEDURE LISTADOEMPLEADOS
(
LISTAOUT OUT SYS_REFCURSOR
)
AS
BEGIN
OPEN LISTAOUT FOR
SELECT FIRST_NAME,LAST_NAME FROM EMPLOYEES;
END LISTADOEMPLEADOS;

Llamar al procedimiento desde oracle


DECLARE
V_LISTAOUT SYS_REFCURSOR;
V_NOMBRE VARCHAR2(100);
V_APELLIDO VARCHAR2(100);
BEGIN
LISTADOEMPLEADOS(V_LISTAOUT);
LOOP
FETCH V_LISTAOUT INTO V_NOMBRE, V_APELLIDO;
Bases de Datos Universidad Mesoamericana
MSc. Ing. Jos Luis Hernndez
EXIT WHEN V_LISTAOUT%NOTFOUND;
dbms_output.put_line(V_NOMBRE || ' ' || V_APELLIDO);
END LOOP;
CLOSE V_LISTAOUT;
END;

Ejemplo 2:
create or replace PROCEDURE SP_INSERTARCLIENTE
(
PC_NOMBRE IN VARCHAR2
, PC_DIRECCION IN VARCHAR2
, PC_NIT IN VARCHAR2
) AS
BEGIN
INSERT INTO
CLIENTE(NOMBRE,DIRECCION,NIT)VALUES(PC_NOMBRE,PC_DIRECCION,P
C_NIT);
END SP_INSERTARCLIENTE;

Llamada al procedimiento
EXEC SP_INSERTARCLIENTE('JUAN','XELA','12345-K');

Otro ejemplo:
Bases de Datos Universidad Mesoamericana
MSc. Ing. Jos Luis Hernndez

Llamada al procedimiento

Funciones:
create or replace FUNCTION FN_TOTALEMPLEADOS
RETURN NUMBER
AS
TOTAL NUMBER;
BEGIN
SELECT COUNT(*) INTO TOTAL FROM EMPLOYEES;
RETURN TOTAL;
END FN_TOTALEMPLEADOS;

Llamada a la funcin
DECLARE
Valor NUMBER;
Bases de Datos Universidad Mesoamericana
MSc. Ing. Jos Luis Hernndez
BEGIN
Valor := FN_TOTALEMPLEADOS;
DBMS_OUTPUT.put_line('TOTAL DE EMPLEADOS '||Valor);
END;

También podría gustarte