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:
FUNCIÓN 2:CREATE OR REPLACE FUNCTION prueba (Text) RETURNS void AS'
DECLARE
' LANGUAGE 'plpgsql';
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';
Cita:
CREATE OR REPLACE FUNCTION cursor (Text) RETURNS void AS'
DECLARE
' LANGUAGE 'plpgsql';
DECLARE
cursor_tabla refcursor;BEGIN
fila tipo_direccion%rowtype;
id_tipo_direccion_aux ALIAS FOR $1;
contador INTEGER;
cantidad INTEGER;
salida BOOLEAN;
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';