MODULO II Programación de funciones en PL/pgSQL para PostgreSQL

PROCEDIMIENTOS ALMACENADOS

Estructura de un Procedimiento Almacenado
El lenguaje PL/pgSQL es estructura en bloques. Todas las palabras clave y los identificadores pueden escribirse mezclando letras mayúsculas y minúsculas. Un bloque se define de la siguiente manera:

CREATE OR REPLACE FUNCTION Nombre(integer) RETURNS integer AS $$ DECLARE …. BEGIN ….. END; $$ LANGUAGE plpgsql;

Declaraciones, constantes, variables y alias.
Las declaraciones de las variables son en cada Bloque, esto nos permite, aislar valores, la sintaxis, para la declaración es de la siguiente forma:

CREATE OR REPLACE FUNCTION DECLARACIONES(integer,integer) RETURNS Text AS $$ DECLARE suma integer:=0; txtmenor varchar(12):='MENOR QUE 25'; txtmayor varchar(12):='MAYOR QUE 25'; txtigual varchar(12):='IGUAL QUE 25'; numero1 ALIAS FOR $1; constante CONSTANT integer := 100; BEGIN suma:=numero1+$2; IF suma < 25 THEN RETURN txtmenor; ELSE IF suma > 25 THEN RETURN txtmayor; ELSE RETURN txtigual; END IF; END IF; END; $$ LANGUAGE plpgsql;

Eduardo Calderón - Taller de Base de Datos Orientados a Objetos

RETURN. ELSE RAISE NOTICE 'other than 1.3 THEN RAISE NOTICE '1. END LOOP. RETURN SUMA. CONTADOR:=CONTADOR+1. END. END LOOP. lo único que hace es un FOR. BEGIN FOR CONTADOR IN 1.2'. $$ LANGUAGE plpgsql. WHILE. CONTADOR integer:=0. CREATE OR REPLACE FUNCTION MIENTRAS(integer) RETURNS integer AS $$ DECLARE SUMA integer:=0. El siguiente procedimiento.3. una sentencia de control.2. END CASE.MODULO II Programación de funciones en PL/pgSQL para PostgreSQL Estructura de Control .$1 LOOP SUMA:=SUMA+$1. WHEN 4 THEN RAISE NOTICE '4'.4'. END. El siguiente ejemplo. BEGIN WHILE CONTADOR <> $1 LOOP SUMA:=SUMA+$1. CONTADOR integer:=0.Taller de Base de Datos Orientados a Objetos . Estructura de iteración FOR. que nos permite evaluar varias condiciones. CREATE OR REPLACE FUNCTION foo(int) RETURNS void AS $$ BEGIN CASE $1 WHEN 1.2. $$ LANGUAGE plpgsql. RAISE NOTICE '3'. Eduardo Calderón . lo único que hace es un WHILE hasta que el valor del parámetro sea igual al que le enviamos. acepta por parámetros un número del tipo entero y retorna el mismo tipo. El siguiente procedimiento.. se hace el uso del CASE. de 1 hasta el valor del parámetro que le enviamos. END. acepta por parámetros un número del tipo entero y retorna el mismo tipo. RETURN SUMA. CREATE OR REPLACE FUNCTION PARA(integer) RETURNS integer AS $$ DECLARE SUMA integer:=0. $$ LANGUAGE plpgsql.

data). data TEXT) RETURNS VOID AS $$ BEGIN LOOP UPDATE db SET b = data WHERE a = key. cuando se viola la restriccion de UNIQUE. $$ LANGUAGE plpgsql. END LOOP. CREATE FUNCTION merge_db(key INT.do nothing END. IF suma < 25 THEN RAISE NOTICE 'SUMA %' . $$ LANGUAGE plpgsql.Taller de Base de Datos Orientados a Objetos . END IF. en este caso. EXCEPTION WHEN unique_violation THEN -. El siguiente procedimiento. RETURN.txtmenor. Eduardo Calderón . BEGIN suma:=numero1+$2. conrolamos la sentencia INSERT. txtmayor varchar(12):='MAYOR QUE 25'.txtmenor. END IF. constante CONSTANT integer := 100. CREATE OR REPLACE FUNCTION MENSAJES2(integer. BEGIN INSERT INTO db(a.integer) RETURNS Text AS $$ DECLARE suma integer:=0. END. ELSE RAISE EXCEPTION 'SUMA %' . podemos ver como se maneja la excepción. numero1 ALIAS FOR $1. IF found THEN RETURN. txtmenor varchar(12):='MENOR QUE 25'. END.MODULO II Programación de funciones en PL/pgSQL para PostgreSQL Abortando la Ejecución y Mensajes.b) VALUES (key. Excepxiones.

• Se insertan los Datos Eduardo Calderón .5.5}'. Devolviendo una tabla • Se crea la tabla foo. ELSE RETURN 't'.3.4. ELSE IF NUM < 100 THEN RETURN 'f'.MODULO II Programación de funciones en PL/pgSQL para PostgreSQL Retorno Booleano CREATE FUNCTION booleano(integer) RETURNS bool AS $$ DECLARE num ALIAS FOR $1. RETURN vector. Arreglos CREATE OR REPLACE FUNCTION TEXTO(INTEGER) RETURNS INTEGER ARRAY AS $$ DECLARE vect INTEGER ARRAY[5]:='{1.. END. END IF. BEGIN IF num ISNULL THEN RETURN 'f'. BEGIN FOR i IN 1.$1 LOOP vector[i]:=vect[I]. $$ LANGUAGE plpgsql.Taller de Base de Datos Orientados a Objetos . vector integer array. END. i INTEGER:=1. $$ LANGUAGE 'plpgsql'. END LOOP. END IF.

CREATE OR REPLACE FUNCTION MOSTRAR() RETURNS SETOF foo AS $$ DECLARE r foo%rowtype. foosubid INT. 5. INSERT INTO foo VALUES (1. Eduardo Calderón . BEGIN FOR r IN SELECT * FROM foo WHERE fooid > 0 LOOP RETURN NEXT r. 2.Taller de Base de Datos Orientados a Objetos .MODULO II Programación de funciones en PL/pgSQL para PostgreSQL • Se muestran los datos a través del PROC ALM CREATE TABLE foo (fooid INT. END LOOP. 'six'). 'three'). RETURN. INSERT INTO foo VALUES (4. END $$ LANGUAGE 'plpgsql' . fooname TEXT).

vu_fecha date. CREATE TABLE viaje (via_id INT. vu_hora time). RETURN. '10. --Select * from VUELOS. pasajero. via_vuelo varchar(5). CREATE TABLE pasajero (pas_id INT. pas_rut varchar(15). END LOOP. CREATE TABLE vuelos (vu_id INT. --INSERT INTO viaje VALUES (1. Eduardo Calderón .Taller de Base de Datos Orientados a Objetos .'16:00').125. 'LAN'. 'EDUARDO'. pas_rut.150'). via_rut varchar(15)). --CREACION DE UNA VISTA TIPO------CREATE TYPE vuelopasajero AS (vu_vuelo varchar(5). --Select * from Viaje.'LAS CONDES'). 'LA380'. vu_aerolinea varchar(20).'2010-04-26'. pas_rut varchar(15). ---------------------------------------------------------Select * from pasajero. vu_fecha. pas_domicilio varchar(40)).150'. pas_nombre varchar(20). 'LA380'.125. vu_hora time) --CREACION DE PROCEDIMIENTO RETORNANDO VISTA TIPO-----------CREATE OR REPLACE FUNCTION vueloshoy() RETURNS SETOF vuelopasajero AS $$ DECLARE R vuelopasajero%rowtype. ----------------------------------------------------------INSERT INTO pasajero VALUES (1. vu_hora FROM vuelos.viaje WHERE via_rut = pas_rut AND via_vuelo = vu_vuelo AND vu_fecha BETWEEN(current_date) AND (current_date + 2) LOOP RETURN NEXT R. vu_vuelo varchar(5). BEGIN FOR R IN SELECT vu_vuelo. END $$ LANGUAGE 'plpgsql'. '10. --INSERT INTO vuelos VALUES (1. vu_fecha date.MODULO II Programación de funciones en PL/pgSQL para PostgreSQL Retorno de campos de varias tablas.

Sign up to vote on this title
UsefulNot useful