Está en la página 1de 15

PL/pgSQL

Es un lenguaje imperativo provisto por el gestor de base de datos


PostgreSQL. Permite ejecutar comandos SQL mediante un lenguaje
de sentencias imperativas y uso de funciones, dando mucho ms
control automtico que las sentencias SQL bsicas.
Descripcin

Estructura de PL/pgSQL:
El lenguaje PL/pgSQL no es sensible a las maysculas. Todas las palabras clave e
identificadores pueden usarse en cualquier mezcla de maysculas y minsculas.

PL/pgSQL es un lenguaje orientado a bloques. Un bloque se define como:

Puede haber cualquier numero de subbloques en la seccin de sentencia de un bloque.


Los subbloques pueden usarse para ocultar variables a otros bloques de sentencias. Las
variables declaradas en la seccin de declaraciones se inicializan a su valor por defecto
cada vez que se inicia el bloque, no cada vez que se realiza la llamada a la funcin.
Comentarios
Hay dos tipos de comentarios en PL/pgSQl.
Un par de guiones '--' comienza un comentario que se extiende
hasta el fin de la lnea.
Los caracteres '/*' comienzan un bloque de comentarios que se
extiende hasta que se encuentre un '*/'. Los bloques de
comentarios no pueden anidarse pero un par de guiones
pueden encerrarse en un bloque de comentario, o ocultar los
limitadores de estos bloques.
Declaraciones
Todas las variables, filas y columnas que se usen en un bloque o
subbloque ha de ser declarado en la seccin de declaraciones del
bloque, excepto las variables de control de bucle en un bucle FOR que
se itere en un rango de enteros. Los parmetros dados a una funcin
PL/pgSQL se declaran automticamente con los identificadores
usuales, $n.
Declaraciones

Las declaraciones tienen la siguiente sintaxis:

name [ CONSTANT ] >typ> [ NOT NULL ] [ DEFAULT | := value ];

Esto declara una variable de un tipo base especificado. Si la variable es declarada como CONSTANT, su valor
no podr ser cambiado. Si se especifica NOT NULL, la asignacin de un NULL producir un error en tiempo de
ejecucin. Dado que el valor por defecto de todas las variables es el valor NULL de SQL, todas las variables
declaradas como NOT NULL han de tener un valor por defecto.

name class%ROWTYPE;

Esto declara una fila con la estructura de la clase indicada. La clase ha de ser una tabla existente, o la vista de
una base de datos. Los campos de un tipo de fila heredan los tipos de datos, tamaos y precisiones de las
tablas.
Declaraciones
name RECORD;
Los registros son similares a los tipos de fila, pero no tienen una estructura predefinida. Se
emplean en selecciones y bucles FOR, para mantener una fila de la actual base de datos
en una operacin SELECT.

name ALIAS FOR $n;


Para una mejor legibilidad del cdigo, es posible definir un alias para un parmetro
posicional de una funcin.Estos alias son necesarios cuando un tipo compuesto se pasa
como argumento a una funcin

RENAME oldname TO newname;


Esto cambia el nombre de una variable, registro o fila. Esto es til si NEW o OLD ha de ser
referenciado por parte de otro nombre dentro de un procedimiento
Tipos de Datos
Los tipos de una variable pueden ser cualquiera de los tipos bsicos existentes en la base
de datos. type en la seccin de declaraciones se define como:

Postgres-basetype
variable%TYPE
class.field%TYPE

variable es el nombre de una variable, previamente declarada en la misma funcin, que


es visible en este momento.
class es el nombre de una tabla existente o vista, donde field es el nombre de un
atributo.

El uso de class.field%TYPE hace que PL/pgSQl busque las definiciones de atributos en la


primera llamada a la funcin, durante toda la vida de la aplicacin final.
Expresiones
Todas las expresiones en las sentencias PL/pgSQL son
procesadas usando backends de ejecucin. Las expresiones que
puedan contener constantes pueden de hecho requerir
evaluacin en tiempo de ejecucin (por ejemplo, 'now' para el
tipo 'datatime'), dado que es imposible para el analizador de
PL/pgSQL identificar los valores constantes distintos de la
palabra clave NULL. Todas las expresiones se evalan
internamente ejecutando una consulta.
Sentencias
Cualquier cosa no comprendida por el analizador PL/pgSQL tal como se ha especificado ser enviado
al gestor de bases de datos, para su ejecucin. La consulta resultante no devolver ningn dato.
Una asignacin de un valor a una variable o campo de fila o de registro se escribe:

Una asignacin de una seleccin completa en un registro o fila puede hacerse del siguiente modo:

Target puede ser un registro, una variable de fila o una lista separada por comas de variables
y campo de registros o filas.
Si una fila o una lista de variables se usa como objetivo, los valores seleccionados han de
coincidir exactamente con la estructura de los objetivos o se producir un error de ejecucin.
La palabra clave FROM puede preceder a cualquier calificador vlido, agrupacin,
ordenacin, etc. que pueda pasarse a una sentencia SELECT.
Llamadas a otra funcin
Todas las funciones definidas en una base de datos Postgres
devuelven un valor. Por lo tanto, la forma normal de llamar a una
funcin es ejecutar una consulta SELECT o realizar una
asignacin (que de lugar a un SELECT interno de PL/pgSQL).
Pero hay casos en que no interesa saber los resultados de las
funciones.

Esto ejecuta 'SELECT query' en el gestor , y descarta el


resultado. Los identificadores como variables locales son de
todos modos sustituidos en los parmetros
Condiciones

expression debe devolver un valor que al menos


pueda ser adaptado en un tipo booleano.
Bucles
Hay varios tipos de bucles.

1. Se trata de un bucle no condicional que ha de ser terminado


de forma explicita, mediante una sentencia EXIT. La etiqueta
opcional puede ser usado por las sentencias EXIT de otros
bucles anidados, para especificar el nivel del bucle que ha de
terminarse.
Bucles

2. Se trata de un lazo condicional que se ejecuta mientras la evaluacin de


expresin sea cierta.

3. Se trata de un bucle que se itera sobre un rango de valores enteros. La variable


name se crea automticamente con el tipo entero, y existe solo dentro del bucle.
Las dos expresiones dan el limite inferior y superior del rango y son evaluados slo
cuando se entra en el bucle. El paso de la iteracin es siempre 1.
Bucles

4. EL registro o fila se asigna a todas las filas resultantes de la clausula de


seleccin, y la sentencia se ejecuta para cada una de ellas. Si el bucle se termina
con una sentencia EXIT, la ultima fila asignada es an accesible despus del
bucle.

5. Si no se incluye label, se termina el lazo ms interno, y se ejecuta la sentencia


que sigue a END LOOP. Si se incluye label ha de ser la etiqueta del bucle actual u
de otro de mayor nivel. EL bucle indicado se termina, y el control se pasa a la
sentencia de despus del END del bucle o bloque correspondiente.
Fuente
http://es.tldp.org/Postgresqles/web/navegable/todopostgresql/x19283
.html

También podría gustarte