¿Qué es PL/SQL?Parte I

Es un lenguaje de procesamiento procedimental, implementado por Oracle. Dispone de estructuras de programación similares a las de la mayoría de los lenguajes de programación que se usarán para realizar consultas en los sistemas de bases de datos (como variables, sentencias de control de flujo, control de excepciones...) Utiliza los caracteres ASCII, No distingue mayúsculas de minúsculas, excepto en una cadena de caracteres entre comillas. También contiene palabras reservadas, y éstas, siempre deben de ponerse en mayúsculas.

 

¿Qué los compone?

Los elementos de PL/SQL son:

  • Tipos de datos.
  • Identificadores. - Operadores.
  • Variables. - Constantes.
  • Bloques PL/SQL.

Lo más importante sin duda son los bloques PL/SQL. Estos bloques presentan una estructura compuesta por tres partes, bien claras. Tenemos:

  1. La sección declarativa, aquí declaramos todas las variables y constantes que utilizaremos en el bloque.
  2.  La sección de ejecución, donde escribiremos las instrucciones que deberán ejecutarse en el bloque. Esta parte es obligatoria.
  3. La sección de las excepciones, donde se definirán los manejadores de los errores

Por ejemplo:

DECLARE nombre_variable tipodedato(10); 
nombre_excepcion EXCEPTION; 
BEGIN SELECT nombre_columna INTO nombre_variable FROM nombre_tabla;
EXCEPTIONS WHEN nombre_exception THEN.... END;

 

Declaración de variables.

En la sección de la declaración de las variables, también podremos declarar cursores. El nombre de la variables sería interesante que comenzase por la letra "v" mientras que las constantes sean por "c" así las tendríamos identificadas.

nombre_variable [CONSTANT] tipo [NOT NULL] [:= valor_inicial];

v_coche VARCHAR(10) := Ibiza;
c_cv CONSTANT NUMBER(3) :=120;

Un cursor es un conjunto de registros devuelto por una instrucción SQL. Técnicamente son fragmentos de memoria reservados para procesar los resultados de la consulta SELECT.

CURSOR nombre_cursor [parametros] IS consulta_SQL;

DECLARE CURSOR emp_cursor IS SELECT coches FROM empresa;

En PL/SQL existen un conjunto de excepciones predefinidas que informan de los errores producidos en la ejecución de las sentencias SQL. Además si lo deseas se pueden definir excepciones de un uso específico. nombre_excepcion EXCEPTION;

 

Instrucciones ejecutables.

Se pueden distinguir dentro de PL/SQL, tres clases de instrucciones.

  • Instrucciones de asignación.
  • Instrucciones de control de flujo.
  • Bucles. Aquí ocurre como muchos lenguajes de programación, que utilizan elementos comunes como por ejemplo concatenar cadenas "||" , operadores lógicos "AND, OR, NOT", operadores sobre números "+, -, *, /", comparadores clásicos "<, <=, =, !=, ^=, >, >=", comparadores SQL "[NOT], LIKE, IS [NOT] NULL, [NOT] BETWEEN....

Por ejemplo:

DECLARE CURSOR cur_emp IS SELECT num_empleado, nomb_empleado FROM empleado; emp_registro cur_emp%ROWTYPE; BEGIN OPEN cur_emp; LOOP FETCH cur_emp INTO emp_registro;
EXIT WHEN cur_emp%NOTFOUND; ... END LOOP; CLOSE cur_emp; END;

 

Sentencias de control de flujo En PL/SQL es posible ejecutar código en función de una expresión lógica mediante la utilización de la sentencia "if"

IF expresion_logica THEN instruccion_PL/SQL; 
[ELSIF expresion_logica THEN instrucciones_PL/SQL;]
[ELSE instrucciones_PL/SQL;] END IF;

Bucles Los bucles como en cualquier lenguaje de programación nos permiten ejecutar/listar código sin necesidad de repetir código , de una manera sencilla y rápida. En PL/SQL estos bucles se identifican como LOOP utilizando diferentes sintaxis.

LOOP instrucciones_PL/SQL END LOOP;
WHILE expresion_logica LOOP Instrucciones_PL/SQL END LOOP; 
FOR control_numerico LOOP instrucciones_PL/SQL END LOOP; 
FOR control_cursor LOOP instrucciones_PL/SQL END LOOP;

Cuando finalice LOOP debe utilizarse la sentencia EXIT para forzar la finalización del bucle. EXIT [WHEN expresion_logica];

Sección de Excepciones. Es muy importante el manejo de las excepciones, en los sistemas de gestión de bases de datos, para informar de cualquier problema que surja a la hora de ejecutar cualquier operación. Siempre es importante informar de los errores que se produzcan, por eso, esta parte es muy importante. Si gestionamos bien los errores, podemos hacer que se siga ejecutando la aplicación a pesar de que se nos presente algún error grave.

WHEN excepciones THEN instrucciones_PL/SQL; Podemos utilizar RAISE para comunicar de forma interactiva una excepción predefinida, devolviendo un código y un mensaje de error no estándar. Oracle nos ofrece una serie de excepciones predefinidas por Oracle :  

NO_DATA_FOUND, TOO_MANY_ROWS

Cuando no obtiene resultados o cuando los resultados son varios cuando se esperaba solo una.

 

INVALID_NUMBER, VALUE_ERROR, ZERO_DIVIDE, DUP_VAL_ON_INDEX

Operaciones inválidas o duplicidad de clave primaria.

 

CURSOR_ALREADY_OPEN, INVALID_CURSOR

Cuando se intenta abrir un cursor abierto o una operación inválida sobre un cursor.

 

PROGRAM_ERROR, STORAGE_ERROR, TIMEOUT_ON_RESORUCE

Error de almacenamiento o ejecución

 

ACCESS_INTO_NULL, COLLECTION_IS_NULL, LOGIN_DENIED, NO_DATA_FOUND

En otro post explicaré los tipos de bloques PL/SQL, ya que hay tantas cosas que no se puede condensar en un solo porst...y en este ya me dejo muchas cosas, pero básicamente ver como se puede estructurar y que existe también excepciones y control de flujo en las consultas. En la siguiente parte incluiré los TRIGGER que es un disparador, que se ejecuta automáticamente cuando se produce un evento en la BBDD... algo que es muy importante. Si queréis saber más podéis acudir a: