Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PLSQL
PLSQL
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).
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;
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.
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.
Ejemplo:
create or replace PROCEDURE LISTADOEMPLEADOS
(
LISTAOUT OUT SYS_REFCURSOR
)
AS
BEGIN
OPEN LISTAOUT FOR
SELECT FIRST_NAME,LAST_NAME FROM EMPLOYEES;
END LISTADOEMPLEADOS;
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;