Sie sind auf Seite 1von 8

PL/pgSQL

La programacin del lado de servidor


Los bloques PL/SQL son unidades de cdigo que se envan al servidor para que
sean procesadas conjuntamente, obviamente esto es mejor para el rendimiento
del sistema que si se envan las sentencias SQL separadamente una a una. Es
decir, cuando se requiere la ejecucin de un bloque PL/SQL, este es enviado al
servidor PL/SQL donde se ejecuta el cdigo PL/SQL y las sentencias SQL son
enviadas al servidor Oracle, como el servidor PL/SQL reside en el servidor Oracle,
el cdigo se ejecuta eficientemente.

Qu es PL/pgSQL ?
PL/pgSQL es un lenguaje procedural cargable que agrupa instrucciones de
computacin y una serie de consultas dentro del servidor de base de datos. Una
de sus ventajas es que evita sobrecargas en la comunicacin cliente servidor.
PL/pgSQL tambin es conocido por usar todos los tipos de datos, columnas,
operadores y funciones de SQL.
Una caracterstica de PL/pgSQL es que reutiliza los planes de consultas ms
importantes a lo largo del tiempo de vida de la conexin a la base de datos.
ESTRUCTURA DE UN PROGRAMA PL/pgSQL
PL/pgSQL es un lenguaje estructurado de bloques. El texto completo de una
definicin de funcin debe ser un bloque. Un bloque se define como:
Una seccin de pequeos lineamientos en un bloque
tambin se los conoce como subbloques. Estos
subbloques tambin se los utiliza como agrupaciones
lgicas.
En la seccin de declaracin se inicializa variables con
sus valores por defecto cuando el bloque es introducido. Como se muestra en el
siguiente ejemplo.

Considerar la sintaxis del lenguaje PL/pgSQL es saber cules son los detalles
lxicos que se usan en un programa de base de datos. Cada estamento y
declaracin debe ir terminado por un punto y coma. Los identificadores por defecto
sern convertidos a minsculas. Para escribir un identificador en maysculas debe
ir con comillas dobles. Para poner un comentario se usa simplemente el smbolo /*
al inicio y */ al final.
Se tienen conceptos que hay que conocer como un estamento bsico que es
asignacin. Una asignacin de un valor a una variable o campo de fila/registro se
escribe:

identificador := expresin;

Un detalle importante a mencionar es que si el tipo de dato de la expresin no


coincide con el tipo de dato de la variable, el valor resultante ser implcitamente
convertido por el intrprete PL/psSQL con la ayuda de los parmetros output
function e input function.
Ejemplos:

Si usamos el comando SELECT significa que se encuentran mltiples columnas


pero solo una fila. Este comando es asignado a una variable tipo fila, tipo registro
o variables escalares.

En esta expresin despus de destino puede ir una variable registro, fila y campos
registro/fila. Cabe resaltar aqu que si queremos crear una tabla dentro de una
funcin PL/pgSQL hay que usar la sintaxis CREATE TABLE AS SELECT.
El parmetro RETURN ms lo que se escribe despus de esta palabra sirve para
retornar desde una funcin PL/pgSQL. Si queremos retornar un valor compuesto
(una fila), debemos escribir una variable registro o fila despus de la palabra
RETURN. La estructura de este parmetro seria as:

Una lnea en PL/SQL contiene grupos de caracteres conocidos como UNIDADES


LEXICAS, que pueden ser clasificadas como:

MANEJO DE BLOQUES EN PL/pgSQL Y DECLARACIONES


Se debe mencionar un aspecto del manejo de bloques que son las declaraciones.
La seccin de declaraciones del bloque sirve para ubicar ah todas las variables,
filas y registros.
A continuacin la declaracin de variables:

Hay palabras reservadas que cumplen una tarea en el editor de base de datos.
Por ejemplo tenemos la palabra DEFAULT que sirve para especificar el valor
asignado a la variable, la palabra CONSTANT no permite la asignacin de otros
valores a la variable y la palabra NOT NULL significa que las variables deben
poseer un valor por defecto no nulo.
Es comn que se utilicen Alias para los parmetros de la funcin. En el siguiente
ejemplo notamos que los parmetros usan los identificadores $1 Y $2.

TIPOS DE DATOS EN PL/pgSQL


En la familia de PL/SQL se hallan tipos de datos como:

Dentro de las variables de tipo compuesto se encuentra la variable de fila o rowtype-variable. Esta variable hace posible que el resultado de una consulta
SELECT o FOR se almacene en una fila completa. Para que esto se d la
columna de dicha consulta debe ser del mismo tipo que la variable. La estructura
debe ser as: variablefila.campo.
En la sintaxis de este parmetro se debe escribir de la siguiente forma:
%ROWTYPE. En vista de que se est actuando sobre filas completas de tablas, el
identificador o alias que es $n tambin ser una variable tipo fila. La estructura del
identificador seria: $1.nombrecampo.
Solo los atributos de una tabla especificados por el usuario pueden ser accesibles
en una variable de tipo fila. En un campo de tipo fila, el tamao del campo de la
tabla as como su tipo de dato es el mismo que usa el tipo fila.

El atributo %TIPE permite declarar variables con el mismo tipo de dato usados en
otros campos de la tabla. Por ejemplo si usted tiene un tipo de dato user_id en su
tabla usuarios. Para declarar una variable con el mismo tipo de dato que uso en su
tabla usuarios, tendra que escribir lo siguiente:

Condiciones
Las sentencias IF le permiten ejecutar comandos cuando se dan ciertas
condiciones.
PL/pgSQL tiene cinco formas de IF:
IF
IF
IF
IF
IF

...
...
...
...
...

THEN
THEN
THEN
THEN
THEN

...
...
...
...

ELSE
ELSE IF
ELSIF ... THEN ... ELSE
ELSEIF ... THEN ... ELSE

IF-THEN
IF expresin-lgica THEN
sentencias
END IF;

Las sentencias IF-THEN son las formas ms simples de IF. Las sentencias entre
THEN y END IF sern ejecutadas si la condicin es verdadera. De otra manera,
sern ignoradas. Ejemplo:
IF v_id_usuario <> 0 THEN
UPDATE usuarios SET email = v_email WHERE id_usuario= v_id_usuario;
END IF;

IF-THEN-ELSE
IF expresin-lgica THEN
sentencias
ELSE
sentencias
END IF;

Las sentencias IF-THEN-ELSE aaden funcionalidad a IF-THEN permitindole


especificar un conjunto de sentencias alternativo que debe ejecutarse si la
condicin produce un valor de falso. Ejemplo:
IF parentid IS NULL OR parentid =
THEN
RETURN fullname;
ELSE
RETURN hp_true_filename(parentid) || / || fullname;
END IF;
IF v_cuenta> 0 THEN
INSERT INTO usuarios_cuenta(count) VALUES (v_cuenta);
RETURN t;
ELSE
RETURN f;
END IF;

IF-THEN-ELSE IF

Las sentencias IF pueden anidarse, como se muestra en el siguiente ejemplo:


IF demo_renglon.sexo = m THEN
pretty_sex := hombre;

ELSE
IF demo_renglon.sexo = f THEN
pretty_sex := mujer;
END IF;
END IF;

Cuando se usa esta forma, realmente se est anidando la sentencia IF dentro de


la parte ELSE de la sentencia IF. As, requiere una sentencia END IF para cada IF
anidado y una para el padre IF-ELSE.
IF-THEN-ELSIF-ELSE
IF expresin-lgica THEN
sentencias
[ ELSIF expresin-lgica THEN
sentencias
[ ELSIF expresin-lgica THEN
sentencias
...]]
[ ELSE
sentencias ]
END IF;
IF-THEN-ELSIF-ELSE

Proporciona un mtodo ms conveniente para revisar varias alternativas en una


sentencia. Formalmente es equivalente a los comandos anidados
IF-THEN-ELSE-IF-THEN,

pero solo se necesita un END

IF.

Ejemplo:

IF numero = 0 THEN
resultado := cero;
ELSIF numero > 0 THEN
resultado := positivo;
ELSIF numero < 0 THEN
resultado := negativo;
ELSE
-- hmm, la nica otra posibilidad que el nmero sea nulo
resultad := NULL;
END IF;

Triggers o disparadores
Durante la ejecucin de una aplicacin de base de datos, hay ocasiones que se
requiere realizar una o ms acciones de forma automtica, si se produce un evento
en especfico. Es decir, que la primera accin provoca la ejecucin de las siguientes
acciones. Los denominados Triggers o disparadores son el mecanismo de
activacin, que posee SQL para entregar esta capacidad.
Definicin.Un Trigger es una orden que el sistema ejecuta de manera automtica como
efecto secundario de alguna modificacin de la base de datos. Entonces los

Triggers siguen en orden la secuencia: evento->condicin->accin. Se ejecutan


mediante los comandos INSERT, DELETE y UPDATE.
Para disear un mecanismo Trigger hay que cumplir algunos requisitos:
1. Procedimiento almacenado: Se debe crear la base de datos y las
relaciones, antes de definir el Trigger.
2. Especificar condiciones para ejecutar el Trigger: Se debe definir
un evento que causa la comprobacin del Trigger y una condicin que
se debe cumplir para ejecutar el Trigger.
3. Especificar las acciones: Se debe precisar qu acciones se van a
realizar cuando se ejecute el Trigger.
La base de datos almacena Trigger como si fuesen datos normales, por lo que son
persistentes y accesibles para todas las operaciones de la base de datos. Una vez
se almacena un Trigger en la base de datos, el sistema de base de datos asume la
responsabilidad de ejecutarlo cada vez que ocurra el evento especificado y se
satisfaga la condicin correspondiente.

Creacin de un disparo
1. Un Trigger se crea con la sentencia CREATE TRIGGER.
2. Despus de que se crea, el Trigger se encuentra a la espera de que se
produzca el evento de activacin.
3. Cuando el evento se produce desencadena una accin.
Forma general:
(1)CREATE TRIGGER nombreTrigger
(2)BEFORE|AFTER|INSTEAD OF AlgnEvento ON nombreTabla
(3)WHEN (condicin)
(3)Action

Variables especiales
Existen algunas palabras reservadas, que estn disponibles para ser utilizadas por
Triggers. Algunas de estas variables especiales disponibles son las siguientes:

Variable que contiene la nueva fila de la tabla para las


operaciones INSERT/UPDATE.
OLD: Variable que contiene la antigua fila de la tabla para las
operaciones UPDATE/DELETE.
NEW:

TG_NAME: Variable que contiene el nombre del Trigger que est usando la

funcin actualmente.
TG_RELID: identificador de objeto de la tabla que ha activado el Trigger.
TG_TABLE_NAME: nombre de la tabla que ha activado el Trigger.

Das könnte Ihnen auch gefallen