sábado, 20 de agosto de 2016

Introducción a PL/SQL

Objetivos:
 Explicar la necesidad de PL/SQL.
• Explicar los beneficios de PL/SQL.
• Identificar los diferentes tipos de bloques en PL/SQL.
• Describir los usos de PL/SQL.
____________________________________________________________________________________
PL/SQL.
• Es Procedural Language Extension to SQL.
• Es el lenguaje de acceso a datos usado por Oracle Corporation para Bases de Datos relacionales.
• Se integra perfectamente con las construcciones de procedimiento SQL.

Structured Query Language (SQL) es el lenguaje principal que se utiliza para acceder y modificar datos en Bases de Datos relacionales. Pero debido a sus limitaciones, nos encontramos con situaciones en las cuales es mucho mas factible utilizar PL/SQL.

Procedural Language/Structured Query Language (PL/SQLprovee una estructura de bloque para escribir código. Gracias a este tipo de estructura, resulta sencillo entender el flujo y ejecución de la unidad del programa y de paso todo esto simplifica el mantenimiento y depuración del código.

PL/SQL ofrece características modernas de ingeniería de software, tales como la encapsulación de datos, manejo de excepciones, ocultación de información y orientación a objetos. PL/SQL proporciona todas las herramientas/Features de procedimiento que están disponibles en cualquier lenguaje de tercera generación (3GL).

PL/SQL Proporciona construcciones de procedimiento, tales como:
• Variables, constantes y tipos de datos.
• Las estructuras de control tales como las sentencias condicionales y bucles.
• Unidades reutilizables de programas que se escriben una vez ejecutados muchas veces.
_____________________________________________________________________________________
Arquitectura PL/SQL.
El diagrama muestra un bloque PL/SQL siendo ejecutado por el motor de PL/SQL. El motor de PL/SQL se encuentra en:

• La Base de Datos de Oracle para la ejecución de subprogramas almacenados.
• El cliente de Oracle Forms cuando se ejecuta aplicaciones Cliente/Servidor, o en el servidor de aplicaciones de Oracle cuando se utiliza Oracle Forms Services para ejecutar las formas en la Web.

Independientemente del entorno de ejecución de PL/SQL, la arquitectura básica sigue siendo la misma. Por lo tanto, todas las sentencias PL/SQL se procesan en el Ejecutor de Sentencias Procedimentales y todas las sentencias SQL se deben enviar al Ejecutor de Sentencias SQL para su procesamiento por los procesos del servidor Oracle. El entorno de SQL también puede invocar el entorno de PL/SQL. Por ejemplo, el entorno de PL/SQL se invoca cuando una función PL/SQL se utiliza en una instrucción SELECT.

El motor de PL/SQL es una máquina virtual que reside en la memoria y procesa las instrucciones M-Code de PL/SQL. Cuando el motor PL/SQL se encuentra con una sentencia SQL, se cambia el contexto para pasar la instrucción SQL a los procesos de Servidor de Oracle. El motor de PL/SQL espera que la instrucción SQL finalice y retorne los resultados antes de seguir procesando las instrucciones subsiguientes del bloque PL/SQL. El motor de Oracle Forms PL/SQL se ejecuta en el cliente para aplicaciones de Cliente/Servidor, y en el servidor de aplicaciones para aplicaciones Forms Services. En cualquier caso, las instrucciones SQL se envían típicamente a través de una red a un Servidor Oracle para su procesamiento.
_____________________________________________________________________________________
Beneficios de PL/SQL.
Integración de construcciones procedimentales con SQL: La ventaja más importante de PL/SQL es la integración de construcciones de procedimiento con SQLSQL es un lenguaje no procedimental. Cuando se emite un comando de SQL, este le dice al servidor de Base de Datos de qué hacer, sin embargo, no le especifica cómo hacerlo. PL/SQL integra las instrucciones de control e instrucciones condicionales con SQL, dándole así mejor control de las sentencias SQL y su ejecución. 

Mejora en rendimiento: Sin PL/SQL, no sería capaz de combinar lógicamente sentencias SQL como una unidad. Si ha diseñado una aplicación que contiene formas, usted puede tener muchas formas diferentes, con campos de cada formulario. Cuando un formulario envía los datos, puede que tenga que ejecutar una serie de sentencias SQL. Las sentencias SQL se envían a la Base de Datos de una en una. Esto se traduce en muchos viajes de red y una llamada a la Base de Datos para cada instrucción SQL, lo que aumenta el tráfico de red y reduce el rendimiento (especialmente en un modelo cliente/servidor).

Con PL/SQL, puede 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 a la vez. Esto reduce significativamente el número de llamadas de Base de Datos. S la aplicación es SQL Intensivo, puede utilizar bloques PL/SQL para agrupar sentencias SQL antes de enviarlas al servidor de Base de Datos Oracle para su ejecución.

Desarrollo Modular de Programas: El Bloque es la unidad básica en todos los programas PL/SQL. Los bloques pueden estar en una secuencia o pueden ser anidados en otros bloques. El Desarrollo Modular de Programas proporciona las siguientes ventajas:

• Puede agrupar de manera lógica sentencias relacionadas dentro de bloques.
• Puede anidar bloques dentro de bloques más grandes para construir programas de gran alcance.
• Puede descomponer su aplicación en módulos más pequeños. Si está diseñando una aplicación compleja, PL/SQL le permite separar la aplicación en módulos más pequeños, manejables, y lógicamente relacionados.
• Se puede mantener fácilmente y depurar código.

En PL/SQL, La modularización se implementa mediante procedimientos, funciones y paquetes.

Integración con Herramientas: El motor de PL/SQL está integrado en las herramientas de Oracle, como Oracle Forms y Oracle Reports. Al utilizar estas herramientas, el motor PL/SQL se encarga de procesar las instrucciones/sentencias de procedimiento; Mientras que las sentencias SQL se pasan a la Base de Datos.

Portabilidad: Los programas de PL/SQL se pueden ejecutar en cualquier parte que Oracle Server se ejecuta, independientemente del sistema operativo y la plataforma. No es necesario modificarlos para así adaptarlos a entornos/plataformas diferentes. Puede escribir paquetes de programas portátiles y crear bibliotecas que pueden ser reutilizados en diferentes entornos. 

Manejo de Excepciones: PL/SQL le permite manejar excepciones de manera eficiente. Se pueden definir bloques separados para tratar las excepciones. 

PL/SQL comparte el mismo sistema de tipo de datos que SQL (con algunas extensiones) y utiliza la misma sintaxis de expresión.
_____________________________________________________________________________________
Estructura de Bloque en PL/SQL.
La imagen muestra un bloque SQL/PL básico. Un bloque SQL/PL consta de cuatro secciones:

• Declarativa (opcional): La sección declarativa comienza con la palabra clave DECLARE y termina cuando empieza la sección ejecutable (BEGIN).

• BEGIN (requerido): La sección ejecutable comienza con la palabra clave BEGIN. Esta sección tiene que tener al menos una sentencia. La sección ejecutable de un bloque SQL/PL puede incluir cualquier número de bloques de SQL/PL.

• Manejo de Excepciones (opcional): La sección de excepciones va anidada dentro de la sección ejecutable. Esta sección comienza con la palabra clave EXCEPCIÓN.

• END (requerido): Todos los bloques SQL/PL deben concluir con una instrucción END. Observar que END termina con un punto y coma.

En un bloque PL/SQL, las palabras claves DECLAREBEGIN y EXCEPCIÓN no son terminadas por un punto y coma. Sin embargo, la palabra clave END, todas las sentencias SQL, y las declaraciones de PL/SQL se deben terminar con un punto y coma.
Sección
Descripción
Inclusión
Declarativa (DECLARE)
Contiene declaraciones de todas las variables, constantes, cursores y excepciones definidas por el usuario, las cuales son referenciadas en las secciones ejecutables y de excepciones.
Optional
Ejecutable
(
BEGIN … 
END;
)
Contiene las instrucciones SQL para recuperar datos de la Base de Datos; Contiene sentencias PL/SQL para manipular los datos en el bloque.
Mandatario
Excepción (EXCEPTION)
Especifica las acciones a realizar cuando surgen errores y condiciones anormales en la sección ejecutable
Optional
_____________________________________________________________________________________
Tipos de Bloque en PL/SQL.
Un programa de PL/SQL comprende de uno o más bloques. Estos bloques pueden estar completamente separados o anidados dentro de otro bloque.

Hay tres tipos de bloques que conforman un programa PL/SQL:

Procedimientos.
Funciones.
Bloques Anónimos.

Procedimientos: Los procedimientos son bloques almacenados en la Base de Datos que contienen sentencias SQL y/o PL/SQL.

Funciones: Las funciones son bloques almacenados en la Base de Datos que contienen sentencias SQL y/o PL/SQL. A diferencia de un procedimiento, una función siempre retorna un valor de un tipo de dato especificado.

Bloques Anónimos: Los bloques anónimos son bloques sin nombre no almacenados. Se declaran en línea al momento que una aplicación es ejecutada y se compilan cada vez que se ejecuta la aplicación. Estos bloques no se almacenan en la Base de Datos. Ellos se pasan al motor de PL/SQL para su ejecución en tiempo de ejecución. Disparadores en los componentes de Oracle Developer consisten en dichos bloques.

Si desea ejecutar el mismo bloque de nuevo, debe volver a escribirlo. No se puede invocar o llamar al bloque escrito anteriormente porque los bloques anónimos no existen después de que se ejecutan.

Subprogramas
Los subprogramas son complementarios a los bloques anónimos. Son bloques PL/SQL que se almacenan en la Base de Datos. Debido a que contienen nombre y se almacenan, se puede invocar siempre que lo desee (según la aplicación). Se pueden declarar ya sea como procedimientos o como funciones. Normalmente, se utiliza un procedimiento para realizar una acción o como función para calcular y devolver un valor. 

Los subprogramas se pueden almacenar a nivel de servidor o aplicación. Con el uso de componentes de Oracle Developer (Forms, Reports), se puede declarar procedimientos y funciones como parte de la aplicación (un formulario o informe) y llamarlos desde otros procedimientos, funciones y triggers dentro de la misma aplicación, siempre que sea necesario.
_____________________________________________________________________________________
Usos de PL/SQL.
La siguiente tabla muestra una variedad de construcciones de programa que utilizan los bloques básicos de PL/SQL. Las construcciones del programa están disponibles basado en el entorno en el que se ejecutan.
Programa
Descripción
Disponibilidad

Bloques Anónimos
Bloques de PL/SQL que están incrustados dentro de una aplicación o se emiten de forma interactiva.
Todos los entornos de PL/SQL.
Procedimientos o Funciones de Aplicaciones
Bloques PL/SQL que se almacenan en una aplicación de Oracle Forms Developer o una biblioteca compartida; pueden aceptar parámetros y pueden ser invocados de manera repetitiva.
Componentes de Herramientas para Oracle Developer (Ejemplo: Oracle Forms Developer, Oracle Reports)
Procedimientos o Funciones
Bloques PL/SQL que se almacenan en el Servidor Oracle; pueden aceptar parámetros y pueden ser invocados de manera repetitiva.
Servidor de Oracle o Herramientas de Oracle Developer
Paquetes
(Aplicaciones o Base de Datos)
Módulos de PL/SQL almacenados que agrupan procedimientos, funciones e identificadores.
Servidor Oracle y Componentes de Herramientas para Oracle Developer (Ejemplo: Oracle Forms Developer, Oracle Reports)
Disparadores(Triggers) de Base de Datos
Bloques de PL/SQL que están asociados con una tabla de Base de Datos y se disparan automáticamente cuando se activan los eventos.
Servidor Oracle o cualquier herramienta de Oracle que emita instrucciones DML
Disparadores de Aplicaciones
Bloques PL/SQL que están asociados ya sea con una tabla de Base de Datos o eventos del sistema. Se disparan automáticamente cuando son activados por un DML o un evento del sistema, respectivamente.
Componentes de Herramientas para Oracle Developer (Ejemplo: Oracle Forms Developer)
Tipos de Objetos (Object Types)
Tipos de datos compuestos definidos por el usuario que encapsulan una estructura de datos, junto con las funciones y procedimientos necesarios para manipular los datos.
Servidor Oracle y Componentes de Herramientas para Oracle Developer
_____________________________________________________________________________________
Fuentes: Oracle Database: PL/SQL Fundamentals