Vous êtes sur la page 1sur 8

geamind

Introducción al lenguaje PL/SQL y Bloques


Anónimos

PL/SQL es un lenguaje de programación que sirve de extensión al SQL de la Base de


Datos ORACLE. Es el lenguaje de programación de cuarta generación para base de
datos Oracle. Es un lenguaje de tipo procedural( Procedural language), con lo que
podemos utilizar determinadas estructuras en los programas que de otro modo
podríamos haber realizado con SQL al ser éste un lenguaje interrogativo.

Está basado en bloques BEGIN-END. Es decir, ésta es la mínima unidad de trabajo. Un


bloque es un conjunto de declaraciones, órdenes y controles que podemos comparar
con un subprograma o subrutina de cualquier lenguaje de programación de los
clásicos.

Hay que tener en cuenta que no es un producto separado. No es un compilador


tradicional sino que está incluido como motor dentro de otros productos de ORACLE.
Se puede encontrar en dos sitios diferentes: en el servidor de la Base de Datos ORACLE
o en las herramientas de desarrollo (Oracle Forms y Oracle Reports). La manera de
operar de PL/SQL es separada, las sentencias SQL se mandan al motor de la Base de
Datos y las sentencias procedurales las procesa el motor PL/SQL. Si se está trabajando
con una herramienta como Oracle Forms el motor es inherente a esta herramienta que
se encarga de diferenciar los dos tipos de órdenes.
geamind
Arquitectura de PL/SQL

Todo código PL/SQL se compone de sentencias PL+ sentencias SQL.


Donde el código PLSQL es ejecutado en un ‘engine’ llamado PLSQL y las secciones
que son sentencias SQL son ejecutadas en el SQL Statement Executor (Oracle
Database Server).
Toda base de datos Oracle tiene un PLSQL engine de forma inherente. Existe
otros productos que cuentan con un PLSQL engine como el Oracle Forms y Oracle
Reports.

En el caso de aplicaciones con Oracle Forms y Reports, el PLSQL Engine se


ejecutará en el lado del cliente y las secciones con sentencias SQL son
ejecutadas en la base de datos.

Beneficios de PL/SQL

Algunos de los beneficios de PL/SQL son:

 Permite crear programas modulares.


 Soporte al lenguaje SQL.
SQL se ha convertido en el lenguaje estándar de las bases de datos por su
flexibilidad, potencia y facilidad de uso y aprendizaje. PL/SQL permite utilizar
todas las funciones, operadores, pseudo columnas y tipos de datos de SQL.
Permite también utilizar “SQL Dinámico”, una avanzada técnica permite
flexibilizar más las aplicaciones.
 Soporte a la programación orientada a objetos.
PL/SQL permite la encapsulación de operaciones y datos con lo que se pueden
crear componentes que sean modulares, de fácil mantenimiento y reutilizables.
También permite ocultar los detalles de los objetos y cambiarlos de tal manera
que no afecten a los programas clientes.
geamind

 Mejor rendimiento
PL/SQL puede enviar un bloque de comandos al servidor Oracle reduciendo de
esta manera el tráfico de red. Los procedimientos almacenados son compilados
una sola vez y guardados en la base de datos en forma compilada; además una
vez que son invocados, éstos se guardan en la caché y son compartidos por
todos los usuarios. De esta manera PL/SQL reduce el tráfico de red, los
requerimientos de memoria y el tiempo de invocación.
 Total portabilidad.
PL/SQL es compatible con cualquier sistema operativo o plataforma donde se
esté ejecutando un servidor Oracle.
 Integración con SQL.
PL/SQL está totalmente integrado con SQL. Soporta todos los tipos de datos de
SQL así como el valor Nulo.
Los atributos %TYPE y %ROWTYPE permiten definir variables en base a las
columnas de las tablas Oracle. Si variara el tipo de la columna, el procedimiento
PL/SQL utilizaría la nueva definición sin tener que ser modificado.
 Gran seguridad.
Los procedimientos almacenados permiten dividir la aplicación entre la parte
cliente y la parte servidor. De esta manera la parte cliente no puede manipular
información sensible. Los disparadores dan la posibilidad de Auditoria.
Permite limitar el acceso a la información de tal manera que sólo sea
manipulable a través de procedimientos. Ejemplo: Un usuario puede acceder a
la información de una tabla mediante un procedimiento que acceda a ella, pero
no puede acceder a la tabla mediante comandos SQL normales por carecer de
privilegios sobre la tabla.

El lenguaje PL/SQL se halla también en las herramientas de Oracle con lo que ofrece
las prestaciones de cálculos y procesamiento en la parte del cliente de estas
herramientas reduciendo el tráfico de red.
geamind
Tipos de código en PL/SQL

Un código en PLSQL puede ser de dos tipos:

 Código anónimo o bloques anónimos.


 Subprogramas almacenados en base de datos.

Un código anónimo es básicamente aquel que el código fuente reside en el lado


cliente y un subprograma reside el código fuente en el servidor. Los
subprogramas pueden ser: procedimientos, funciones, disparadores y paquetes.

Se muestra las diferentes secciones que componen los diferentes tipos de código
PLSQL.
geamind
Bloques Anónimos

Un bloque que no tiene nombre se considera anónimo. Este bloque no se guarda en la


base de datos y se analizará cada vez que sea invocado.

Ejemplo:

DECLARE
Discos NUMBER(5);
BEGIN
SELECT cantidad INTO Discos FROM almacen
WHERE artista = ‘PABLO ALBORAN’
FOR UPDATE OF Cantidad;
IF Discos> 0 THEN – comprobamos la cantidad
UPDATE almacen SET cantidad = cantidad - 1
WHERE artista= ’PABLO ALBORAN’;
INSERT INTO Ventas_Semanal
VALUES (‘Disco de PABLO ALBORAN’, SYSDATE);
ELSE
INSERT INTO Ventas_semanal
VALUES (‘No quedan discos de PABLO ALBORAN’, SYSDATE);
END IF;
COMMIT;
END;

Con PL/SQL se pueden utilizar sentencias SQL para manipular datos y estructura de
control para poder interactuar con ellos. Se pueden declarar variables y constantes,
definir procedimientos y funciones. De esta manera se puede aunar todo el poder de
SQL y la capacidad procedural de un lenguaje.

PL/SQL es un lenguaje estructurado en bloques. Cada bloque puede contener a su vez


otros sub-bloques y así sucesivamente. Cada parte de un bloque o sub-bloque
resuelve, normalmente, un problema o un sub-problema. PL/SQL utiliza la táctica del
“divide y vencerás” para la resolución de problemas más complejos.

Un bloque o sub-bloque relaciona lógicamente declaraciones y comandos. Las


declaraciones son propias de ese bloque y dejan de existir cuando el bloque se finaliza.
geamind
Partes de un bloque Anónimo

Un bloque PL/SQL está compuesto por tres partes bien diferenciadas:

 Parte declarativa: En ella se declaran las variables, constantes, cursores,


registros, etc. que se utilizarán en la parte de ejecución.
 Parte de ejecución: En ella se especifican todos los comandos que se realizarán
para solucionar el problema o sub-problema. También alberga las estructuras
de control. Es la única parte que es obligatoria.
 Parte de excepciones: En ella se tratan los errores que se hayan podido
producir en la parte de ejecución.

El orden es lógico puesto que primero se declara con qué se va a trabajar; en la


segunda se trabaja con ello y en la tercera se comprueba si ha habido algún error y se
obra en consecuencia.

Variables y constantes

Se declaran en la zona de declaraciones. Del ejemplo anterior:

DECLARE
Discos NUMBER(5);

No se puede referenciar a una variable que no haya sido declarada con anterioridad. La
manera de asignar un valor a una variable es utilizar la notación de (:=) (Dos puntos y
el signo igual.

Artista := ‘Lady Gaga’;

La segunda manera de asignar un valor a una variable es recuperando el valor de la


base de datos. Esta asignación se realiza en la parte de ejecución. En el ejemplo:

BEGIN
SELECT cantidad INTO Discos FROM almacen
WHERE artista = ‘PABLO ALBORAN’
geamind

La tercera manera de asignar un valor a una variable es pasando la variable como un


parámetro IN OUT o OUT a un procedimiento.

DECLARE
Salario REAL(7,2);
PROCEDURE Ajusta_salario (identificador INT, salario IN OUT REAL) IS ...
BEGIN
SELECT AVG(sal) INTO salario FROM emp;
Ajusta_Salario (7788, Salario); -- Asigna un nuevo valor a salario

Las constantes son valores que no cambiarán en toda la ejecución del bloque o sub-
bloque.

Disco_Platino CONSTANT REAL := 250000.00;

Cursores

Los cursores son áreas de memoria que se definen para poder acceder a un grupo de
filas recuperadas por una sentencia Select. Se declaran en la zona de declaración y
gestionan en la zona ejecutable.
Existen 2 tipos de cursores: Los implícitos para todas las sentencia SQL que manipulan
datos incluyendo sentencias Select que devuelven una sola fila; y los explícitos para
aquellas sentencias Select que devuelven más de una fila. Todo esto se explica en
detalle en un tema posterior.

DECLARE
CURSOR cursor1 IS
SELECT Artista, Album FROM ventas_nacionales WHERE mes= 2;

El conjunto de filas devueltas serán transferidas al bloque PL/SQL una a una hasta
acabar el conjunto resultante (el grupo de filas que cumplen el criterio del cursor).
geamind
Estructuras de control

Las estructuras de control permiten manipular los datos ya sean del bloque PL/SQL
como de la base de datos. Están en la zona ejecutable. Ofrecen control condicional,
interactividad y control de la ejecución del programa. Los comandos PL/SQL son IF-
THEN-ELSE, CASE, FOR-LOOP, WHILE-LOOP, EXIT-WHEN y GOTO. Conjuntamente, estos
comando permiten resolver cualquier situación. Todo esto se explica en detalle en un
tema posterior.

Excepciones

Cuando se produce un error se levanta (RAISE) una excepción y el flujo del programa
pasa a la zona de excepciones.
Las excepciones pueden ser estándar o definidas por el usuario; además pueden ser
provocadas por un error propio de Oracle (Ej: No hay filas en una Select, se insertan
valores duplicados en una clave única, etc.) o provocadas por el usuario si se cumple
una determinada circunstancia. (Ej: El salario es menor que el legal, no hay stock para
satisfacer un pedido, etc.). Todo esto se explica en detalle en un tema posterior.

DECLARE
...
No_hay_discos EXCEPTION; -- declara una excepción
BEGIN
...
IF num_discos = 0 THEN
RAISE No_hay_discos; -- levanta la excepción (raise)
END IF;
Num_discos := Num_discos –1
EXCEPTION
WHEN No_hay_discos THEN ... -- procesa la excepción.

Vous aimerez peut-être aussi