PL/SQL

La lista a continuación presenta temas relacionados al Lenguaje PL/SQL (Procedural Language/Structured Query Language) el cual es el lenguaje de procedimiento de Oracle Corporation diseñado para reforzar el lenguaje SQL.

Todo este contenido tiene la intención de introducir al lector desde lo simple a lo mas complejo en el poderoso lenguaje PL/SQL, resaltando sus puntos fuertes y facilidades en lo relativo al manejo de Datos almacenados en Bases de Datos Relacionales.

Se trató de exponer los conceptos de manera simple y clara para así facilitar el entendimiento, pero con el fin de mantener la optimalidad y las buenas prácticas. Cada tema contiene ejemplos orientados en escenarios de la vida diaria y aplicables de distintos entornos.

Invito al lector a expresar cualquier duda/sugerencia que pueda surgir durante su visita.

Temas de PL/SQL.

Contenido:
• Arquitectura de PL/SQL
 Beneficios de PL/SQL
 Estructura de Bloque en PL/SQL
 Tipos de Bloque en PL/SQL
 Usos de PL/SQL

Contenido:
• Controlando el Flujo de ejecución
     Sentencias IF
     Expresiones CASE
     Sentencias CASE
     Variables Escalares
     Variables Escalares
• Control Iterativo
     Basic LOOP
     WHILE LOOP
     FOR LOOP
• La Sentencia EXIT
• La Sentencia CONTINUE

Contenido:
• Variables en PL/SQL
• Ajuste de Control SERVEROUTPUT 
• Los Tipos de Variables
     Variables Escalares
     Tipos de datos Compustos
     Las Variables Bind
• Las Nomenclaturas en PL/SQL
• Ajuste de Control AUTOPRINT

Contenido:
• Tipos de Datos Compuestos
     PL/SQL Records
     PL/SQL Collections

• Atributo %ROWTYPE
• Los NESTED Table
• Los VARRAY

Contenido:
• Unidades Léxicas en Bloques PL/SQL
• Funciones de SQL en PL/SQL
• Secuencias en PL/SQL
• Conversiones de Tipo de Dato
• Los Bloques Anidados
• Alcance y Visibilidad de las Variables
• Directrices de programación

Contenido:
• Los Cursores Explícitos
     Sentencia OPEN
     Sentencia FETCH
     Sentencia CLOSE
• Cursores FOR LOOP
• Atributos de los Cursores Explícitos
• Cláusula FOR UPDATE
• Cláusula WHERE CURRENT OF

Contenido:
• Sentencias SQL en programas PL/SQL
• Ambigüedades en la Nomenclatura
• Manipulando Datos en PL/SQL
• Cursores SQL
     Atributo SQL%FOUND
     Atributo SQL%NOTFOUND
     Atributo SQL%ROWCOUNT

Contenido:
• Excepciones en PL/SQL
     Tipos de Excepciones
     Capturando Excepciones
• Cláusula WHEN OTHERS
• Lista de Excepciones Comunes en Oracle
• Función de PRAGMA EXCEPTION_INIT
• Funciones SQLCODE y SQLERRM
• Procedimiento RAISE_APPLICATION_ERROR

Generando Valores Aleatorios


Contenido:
• SubProgramas
     Procedimientos
     Funciones
• Bloques Anónimos vs SubProgramas


Contenido:
• Procedimiento INITIALIZE
• Función NORMAL
• Procedimiento RANDOM
• Procedimientos SEED
• Función STRING
• Procedimiento TERMINATE
• Funciones VALUE

Tipos de Objetos de Oracle


Contenido:
• Los Triggers y sus Usos
• Tipos de Triggers
     Row Triggers and Statement Triggers
     BEFORE and AFTER Triggers
     INSTEAD OF Triggers
     System Events and User Events
• Tipos de Triggers
• Sentencia ALTER TRIGGER
• Sentencia DROP TRIGGER

Contenido:
Programación Orientada a Objetos
• Métodos y Atributos
Sus Componentes y Estructura
• Sentencia CREATE TYPE
• Método EXTEND
• Sentencia DROP TYPE
     Cláusula FORCE
     Cláusula VALIDATE

Métodos en Objetos Oracle


Contenido:
• Los Paquetes de PL/SQL
• Ventajas de los Paquetes
• Especificación y Cuerpo del Paquete
• Variables y Subprogramas Privados

Contenido:
• Los Métodos
     MEMBER
     STATIC
     CONSTRUCTOR
     MAP
     ORDER
• Uso de SELF
• La Herencia en los Objetos

Contenido:
• Paquete UTL_FILE
     Función FOPEN
     Procedimiento PUT_LINE
     Función FCLOSE
     Función IS_OPEN
     ...

Contenido:
• Concepto de Polimorfismo.
• Las Sobrecargas.
• Ejemplos de Sobrecargas:
     En Bloques Anónimos
     En Paquete de PL/SQL
     En Tipos de Objetos

Las Colecciones de PL/SQL


Contenido:
• Los REF CURSOR

     Weak REF Cursor
     Strong REF Cursor
• Los SYS_REFCURSOR

Contenido:
• Las Colecciones de PL/SQL:
     Matrices Asociativas
     Tablas Anidadas
     Los VARRAYs
• Sus Similitudes y Diferencias

JOBS(Tareas) de Base de Datos

SQL Dinámico en PL/SQL


Contenido:
• Definición.

• El Paquete: DBMS_SCHEDULER
• Sus Usos y Ventajas.
• Sus Principales Procedimientos.
• Ejemplos Prácticos.


Contenido:
• Sentencias DDL y PL/SQL.
SQL Dinámico.
--SQL Dinámico Nativo.

     Sentencia EXECUTE IMMEDIATE.

     Sentencias OPEN-FOR, FETCH y CLOSE.
--Package DBMS_SQL.
SQL Dinámico Nativo vs Package DBMS_SQL.

Inyección SQL


Contenido:
 Concepto.
 Tipos de Inyección:
---Sentencia de Modificación.
---Sentencia de Inyección.
---Conversión de tipo de datos.
 Ejemplos prácticos.
 Técnicas contra la Inyección SQL.




     ...



Breve Historia de PL/SQL.
Es prudente destacar que la tecnología implementada en el servidor Oracle está bien posicionada como una de las más avanzadas, potentes y estables entre las Bases de Datos Relacionales del mundo. Oracle provee herramientas de desarrollo que facilitan la interacción con la Base de Datos, manteniendo altos niveles de funcionalidad y buen desempeño. 

Resulta algo dificultoso desarrollar aplicaciones solo con el uso de sentencias SQL, consientes de esto es común usar otros lenguajes de programación que usan interfaces estándar de Base de Datos para poder interactuar con los Datos. Es por ello que en un intento de eliminar esta gran dependencia, Oracle decide crear un lenguaje que interactúe de manera directa con las sentencia SQL en su propia Base de Datos. 

A partir de la versión v3.0 de SQL*Forms fue introducido PL/SQL (versión 1.0), más tarde, con la herramienta Developer/2000 Release 1 se dio vida a PL/SQL versión 1.1.

En 1991, Oracle Corporation lanzó Oracle Version 6.0, el cuál significó un avance importante en la tecnología de su Base de Datos Relacional. Un componente clave de esta Versión fue la llamada "opción de procedimiento (procedural option)" o PL/SQL. Y casi al mismo tiempo, Oracle lanzó la actualización a SQL * Forms Versión 2.3. SQL * Forms V3.0 incorporó el motor PL/SQL por primera vez integrado con la herramienta, permitiendo a los desarrolladores codificar su lógica procedimental de una manera natural y directa.

Hay que resaltar que la primera versión de PL/SQL fue muy limitada en cuanto a capacidades. De lado del servidor, sólo era posible utilizar PL/SQL para crear SCRIPTs de "procesamiento por lotes (batch-processing)" de sentencias procedimentales y SQL. En otras palabras, no era posible almacenar procedimientos o funciones reutilizables. Del mismo modo no era posible construir aplicaciones modulares ni almacenar complejas reglas de negocio en el servidor. De lado del cliente, si era posible crear procedimientos y funciones, pero no había soporte documentado para las funciones y por lo tanto no fueron utilizadas por muchos desarrolladores durante años. Además, esta versión de PL/SQL no implementó soporte de matriz y no pudo interactuar con el sistema operativo (para entrada o salida). Estaba muy lejos de un lenguaje de programación completo.

A pesar de todas sus limitaciones, PL/SQL fue muy bien recibido por la comunidad de desarrolladores. Esto porque el deseo de tener la capacidad de codificar una simple sentencia IF dentro de SQL * Forms era muy fuerte.

Con el paso de los años, y motivados por la gran demanda de funcionalidad a la hora del mantenimiento de una Base de Datos, Oracle ha introducidos grandes funcionalidades programáticas y procedimentales a su lenguaje PL/SQL, haciéndolo lucir competente ante un mercado exigente y nada conformista.

Sin más decir, les invito a navegar el en Mundo Mágico de PL/SQL.
_____________________________________________________________________________________
Fuentes:
http://www.orafaq.com/wiki/PL/SQL#History_and_support_status
http://www.plsqltutorial.com/what-is-plsql/
http://docstore.mik.ua/orelly/oracle/prog2/ch01_03.htm