miércoles, 29 de abril de 2015

Introducción al Lenguaje PL/SQL

Aspectos Generales de PL/SQL

  • PL/SQL (Procedural Language/SQL) es un lenguaje de programación y manipulación de datos que proporciona Oracle.
  • Provee una manera muy cómoda de relacionar los conceptos de Bases de Datos y manejarlos mediante ciertas estructuras de control.
  • Es una Extensión Procedimental del SQL combinando la potencialidad y flexibilidad de SQL con la de un lenguaje 3GL:
    • SQL es un Lenguaje de Consulta de Cuarta Generación (4GL) para Base de Datos Relacionales que describe lo que se debe hacer pero no como hacerlo.
    • Los Lenguajes de Tercera Generación (3GL) tienen estructuras procedimentales para expresar como efectuar las operaciones.
  • Proporciona una estructura de bloque para escribir el código ejecutable, permitiendo que su mantención sea fácil.
  • Proporciona todo lo que está disponible en un lenguaje procedimental 3GL como son:
    • Variables, constantes y tipos.
    • Estructuras de control como sentencias condicionales.
    • Unidad de programa Reusable que se escribe una vez y ejecutado muchas veces.
  • Permite construir las unidades de programas de la Base de Datos Oracle como son: Procedimientos, Funciones, Triggers, Package y Scripts.

Beneficios de PL/SQL

Integración de lenguaje procedimental con SQL: la ventaja más importante de PL / SQL es la integración de las construcciones de procedimiento con SQL. SQL es un lenguaje no procedimental. Cuando se ejecuta un comando SQL, el comando le dice al servidor de base de datos qué hacer. Sin embargo, no se puede especificar cómo hacerlo. PL / SQL integra sentencias de control e instrucciones condicionales con

Mejora el rendimiento: sin PL / SQL no se podría combinar lógicamente sentencias SQL como una unidad. Las sentencias SQL se envían de una en una a la base de datos. Esto se traduce en una llamada a la base de datos para cada sentencia de SQL, lo que aumenta el tráfico de red y la reducción del rendimiento ( especialmente en un modelo cliente / servidor).
Con PL / SQL, se pueden combinar todas estas sentencias SQL en una sola unidad de programa. La aplicación puede enviar todo el bloque a la base de datos en lugar de enviar las sentencias SQL de una en una . Esto reduce significativamente el número de llamadas de base de datos.

Desarrollo de Programas Modulares: la unidad básica en un programa PL/SQL es un bloque, por lo tanto todos los programas PL/SQL contienen
bloques los que pueden estar en secuencia o anidados en otros bloques. El desarrollo de programas modularizados tienen la ventaja de que:

  • Se pueden agrupar lógicamente sentencias relacionadas dentro de bloques.
  • Se pueden anidar bloques dentro de bloques grandes para construir programas poderosos.
  • Se pueden mantener fácilmente y optimizar el código.

Integración con herramientas de Oracle: el motor de PL/SQL está integrado en las herramientas de Oracle como Oracle Forms, Reports de Oracle entre otras. Al utilizar estas herramientas, el motor de PL/SQL localmente procesa las sentencias procedimentales; sólo las sentencias SQL se ejecutan en la base de datos.

Portabilidad: un programa PL/SQL se puede ejecutar en cualquier Servidor Oracle independiente del Sistema Operativo y la Plataforma.

Manejo de errores: PL/SQL permite manejar errores o excepciones de manera eficiente. Se pueden definir bloques separados para tratar las excepciones. Las excepciones pueden ser definidas por el usuario o propios de Oracle (predefinidas).


Estructura de un Bloque PL/SQL

PL/SQL es un lenguaje estructurado en bloques, por lo tanto la unidad básica de codificación en los programas PL/SQL son bloques lógicos.
Mejoran el rendimiento, pues se envían los bloques completos al servidor para ser procesados en lugar de enviar cada sentencia SQL. Los
bloques pueden contener otros sub-bloques dentro de ellos con las mismas características. Un bloque (o sub-bloque) permite agrupar en forma lógica un
grupo de sentencias. Se pueden efectuar declaración de variables que sólo son validas en los bloques donde fueron definidas.
Los bloques PL/SQL presentan una estructura específica de tres partes bien definidas una sección de Declaración, una sección de Ejecución y otra de
manejo de Excepciones.

Sección de Declaración(opcional): comienza con la palabra DECLARE y termina cuando comienza la sección de Ejecución. Contiene declaración de
todas las variables, constantes, cursores y excepciones definidas por el usuario que serán referenciadas en las secciones de ejecución y
excepción.

Sección de Ejecución (obligatorio): comienza con la palabra BEGIN y finaliza con END. Observe que END finaliza con ; (punto y coma). La sección
ejecutable de un bloque PL/SQL contiene sentencias SQL que recuperan datos desde la Base de Datos y sentencias PL/SQL para manipular los
datos. Un bloque PL/SQL puede estar formado por más de un bloque PL/SQL.

Sección de Excepciones (opcional): La sección de excepciones está dentro de la sección de ejecución. Esta sección comienza con la palabra
EXCEPTION y especifica las acciones a realizar cuando una condición anormal y de error surge en la sección de Ejecución.

ejemplo

DECLARE (Opcional)
    /* Declaraciones locales de: variables, cursores  y 
        excepciones definidas por el usuario*/
BEGIN (Obligatorio)
    /* Proceso: conjunto de sentencias ejecutables SQL y   
        PL/SQL*/
EXCEPTION (Opcional)
   /*Excepciones: acciones a realizar cuando ocurren errores*/
END; (Mandatorio)
  /* Fin del bloque PL/SQL */

Tipos de Bloques PL/SQL

Un programa PL/SQL comprende uno o más bloques. Estos bloques pueden estar completamente separado o anidado dentro de otro bloque.

Bloques Anónimos (Anonymous Blocks): Son bloques sin nombre, no se almacenan en la base de datos y por lo tanto se compilan cada vez que son ejecutados.

Subprogramas: Son bloques PL/SQL con nombre y que pueden ser almacenados en la Base de Datos:

  • Procedimientos (Procedures): son bloques PL/SQL que ejecutan una secuencia de acciones. Una vez compilados quedan en la Base de Datos y pueden ser utilizados por múltiples aplicaciones. Se compilan cada vez que son ejecutados.
  • Funciones (Functions): son bloques PL/SQL que tienen las mismas características de un procedimiento almacenado. La diferencia radica en que debe retornar un valor. Las funciones y procedimientos se pueden agrupar en estructuras llamadas Paquetes (Packages).
  • Paquetes (Packages): es una estructura PL/SQL que permite almacenar en forma conjunta una serie de objetos relacionados. Dentro de un paquete se pueden incluir procedimientos, funciones, cursores, tipos y variables.
  • Disparadores (Triggres): es un bloque PL/SQL que se ejecuta cuando ocurre un evento particular sobre la tabla al que está asociado.

Ejemplo

-- Bloque Anonimo
[DECLARE]

……….
BEGIN
  -- Sentencias

[EXCEPTION]

END;

PROCEDURE nombre
IS
………
BEGIN
  -- Sentencias

[EXCEPTION]

END;

FUNCTION nombre
RETURN tipo_de_dato
IS
……….
BEGIN
  -- Sentencias RETURN valor;
[EXCEPTION]

END;

TRIGGER nombre  cuando_se_activa evento_que_lo_activa
……..
BEGIN
  -- Sentencias

[EXCEPTION]

END;

PACKAGE nombre
IS
PROCEDURE ……..
FUNCTION ………..
END;

PACKAGE BODYnombre
IS
PROCEDURE ……. 
…………….………
END;
FUNCTION …….. 
…………………….
END; 
END;

Creación de un Bloque Anónimo

Para crear un bloque anónimo usando SQL Developer, se debe escribir el bloque en el área de trabajo. El bloque tiene la sección declarativa y la sección de ejecución y obtiene el primer nombre del empleado cuya identificación es 100 y l es almacenado en la variable v_fname.

Para ejecutar el bloque anónimo se debe hacer click en el Ejecutar Script el área de trabajo. El mensaje "bloque anónimo terminado" se muestra en la ventana de salida de la secuencias de comandos después de ejecutar el bloque.


Mostrando la Salida de un Bloque PL/SQL

Para mostrar la salida de un bloque PL/SQL, primero se debe activar la visualización del Package DBMS_OUTPUT (de Oracle) haciendo click en el botón Ver de SQL Developer. Segundo, elegir la opción Salida de DBMS y se abrirá la ventana. En esta ventana se debe dar click en Activar DBMS_OUTPUT para conexión lo que hará que aparezca otra ventana. En esta ventana se debe seleccionar base de datos en la cual se desea trabajar. Al hacerlo se activará la ventana en donde se visualizarán todas las salidas de los bloques PL/SQL que se ejecuten.

Una vez activa la salida del bloque PL/SQL, se debe utilizar el package de Oracle DBMS_OUTPUT y su procedimiento PUT_LINE en el bloque PL/SQL. De esta manera, el bloque obtiene el primer nombre del empleado con identificación 100 y lo almacena en la variable v_fname. Posteriormente el bloque muestra el mensaje El primer nombre del empleado 100 es concatenado con el valor almacenado en la variable v_fname que es Steven. Por lo tanto al ejecutar el bloque PL/SQL la salida será el resultado que se muestra.

Otra opción para mostrar la salida de un bloque PL/SQL, es utilizar el comando SET SERVEROUPUT ON el que se activará la visualización del DBMS_OUTPUT. A continuación se escribe el bloque PL/SQL usando el package de Oracle DBMS_OUTPUT y su procedimiento PUT_LINE. Por lo tanto al ejecutar el bloque PL/SQL la salida será el resultado que se muestra.



Guardando la Salida de un Bloque PL/SQL

SQLDeveloper permite que la salida que se visualiza en un bloque PL/SQL, usando DBMS_OUTPUT, pueda ser guardada en un archivo en diferentes formatos de salida. el bloque mostrará el nombre y salario de los empleados que trabajan en el departamento 30.

Existe la posibilidad de que este listado pueda ser guardado en un archivo y al hacerlo se debe indicar la ruta y el nombre del archivo que almacenará la salida del bloque. Posteriormente al abrir el archivo de puede ver que el listado los empleados del departamento 30 quedó guardado en el mismo formato como se mostró.

ejemplo

SET SERVEROUPUT ON;
DECLARE
v_fname VARCHAR(20);
BEGIN
 SELECT first_name
  INTO v_fname
  FROM employees
 WHERE employee_id = 100;
 DBMS_OUTPUT.PUT_LINE('El primer nombre del empleado 100 es: ' || v_fname);
END;

1 comentario:

  1. te felicito por copiar las ppt de duoc. Te falto store procedures, functions, triggers y package.. xD

    ResponderEliminar