Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/01/2009, 14:53
larios_tnt
 
Fecha de Ingreso: febrero-2008
Mensajes: 75
Antigüedad: 16 años, 2 meses
Puntos: 0
¿Qué es más rentable en tiempo?

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';