Beruflich Dokumente
Kultur Dokumente
Beneficios de PL/SQL
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
Se muestra las diferentes secciones que componen los diferentes tipos de código
PLSQL.
geamind
Bloques Anónimos
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.
Variables y constantes
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.
BEGIN
SELECT cantidad INTO Discos FROM almacen
WHERE artista = ‘PABLO ALBORAN’
geamind
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.
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.