He creado 2 funciones cuyo objetivo es determinar si el valor de "id_tipo_direccion" de la tabla "tipo_direccion" (dicha tabla sólo tiene el campo "id_tipo_direccion") existe o no.
La función 1 cuenta cuántos veces aparece.
La función 2 estudia cada valor del campo a "id_tipo_direccion" mediante un puntero.
Le he metido a la tabla 200 valores y, una vez ejecutadas ambas funciones, me tardan lo mismo en dar el resultado. Por lo que mi pregunta es ¿merece la pena el puntero?
FUNCIÓN 1: Cita: CREATE OR REPLACE FUNCTION prueba (Text) RETURNS void AS'
DECLARE
cantidad INTEGER;
BEGIN
cantidad = count (id_tipo_direccion) FROM tipo_direccion WHERE id_tipo_direccion = $1;
IF cantidad IS NOT NULL THEN
raise notice ''El id_tipo_direccion = % esta en la tabla direccion'', $1;
ELSE
raise notice ''El id_tipo_direccion = % NO esta en la tabla direccion'', $1;
END IF;
END;
' LANGUAGE 'plpgsql';
FUNCIÓN 2: Cita: CREATE OR REPLACE FUNCTION cursor (Text) RETURNS void AS'
DECLARE
cursor_tabla refcursor;
fila tipo_direccion%rowtype;
id_tipo_direccion_aux ALIAS FOR $1;
contador INTEGER;
cantidad INTEGER;
salida BOOLEAN;
BEGIN
contador = 0;
salida = true;
cantidad = count (id_tipo_direccion) FROM tipo_direccion;
OPEN cursor_tabla FOR SELECT id_tipo_direccion FROM tipo_direccion;
FETCH cursor_tabla INTO fila;
WHILE (salida = true) AND (contador <= cantidad) LOOP
IF fila.id_tipo_direccion = id_tipo_direccion_aux THEN
salida = false;
ELSE
fetch cursor_tabla into fila;
contador = contador + 1;
END IF;
END LOOP;
IF (salida = true) OR (contador > cantidad) THEN
raise notice ''El id_tipo_direccion = % NO esta en la tabla direccion'', $1;
END IF;
CLOSE cursor_tabla;
END;
' LANGUAGE 'plpgsql';