Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

Problema con funcion PostgreSQL

Estas en el tema de Problema con funcion PostgreSQL en el foro de PostgreSQL en Foros del Web. Hola. tengo un problema para la correcta ejecucion de esta consulta. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original CREATE OR REPLACE FUNCTION funciontotal ( )   ...
  #1 (permalink)  
Antiguo 13/06/2011, 12:25
 
Fecha de Ingreso: junio-2011
Mensajes: 5
Antigüedad: 13 años, 5 meses
Puntos: 0
Problema con funcion PostgreSQL

Hola. tengo un problema para la correcta ejecucion de esta consulta.

Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION funciontotal()
  2.   RETURNS INTEGER AS
  3. $BODY$
  4. DECLARE
  5. contador INTEGER :=1;
  6. cantidad INTEGER;
  7. Fechamin DATE;
  8. Fechamax DATE;
  9. lamoda CHARACTER VARYING;
  10.     BEGIN
  11.         cantidad := COUNT(DISTINCT(auxiliar.partida)) FROM auxiliar;
  12.        
  13.         WHILE contador <= cantidad LOOP
  14.             lamoda:= DISTINCT(auxiliar.partida) FROM auxiliar LIMIT 1 offset contador;
  15.             Fechamin := MIN(auxiliar.fecha) FROM auxiliar WHERE auxiliar.partida = lamoda;
  16.             Fechamax := MAX(auxiliar.fecha) FROM auxiliar WHERE auxiliar.partida = lamoda;
  17.             DELETE FROM la_tabla WHERE (la_tabla.fecha BETWEEN Fechamin AND Fechamax) AND (la_tabla.partida  = lamoda);
  18.             contador :=contador+1;
  19.         END LOOP;
  20.        
  21.         RETURN 1;
  22.     END;
  23. $BODY$
  24.   LANGUAGE 'plpgsql' VOLATILE
  25.   COST 100;
  26. ALTER FUNCTION funciontotal() OWNER TO postgres;

el problema es que no hace nada dentro del while solo sumar. contador +1.

y cantidad devuelve un numero => 1 siempre.

me podrian decir cual es el error.

de antemano muchas gracias .
  #2 (permalink)  
Antiguo 13/06/2011, 12:44
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Problema con funcion PostgreSQL

En la sentencia delete utiliza la sentencia EXECUTE.
Cuando utilizas sentencis preparadas no se puede hacer de la forma que tratas.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 13/06/2011, 12:51
 
Fecha de Ingreso: junio-2011
Mensajes: 5
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Problema con funcion PostgreSQL

como seria la forma correta?
  #4 (permalink)  
Antiguo 13/06/2011, 12:56
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Problema con funcion PostgreSQL

Mire este tema
http://www.forosdelweb.com/f99/plpgs...nsulta-899515/
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 13/06/2011, 13:13
 
Fecha de Ingreso: junio-2011
Mensajes: 5
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Problema con funcion PostgreSQL

esto estaría bueno?

Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION funciontotal()
  2.   RETURNS INTEGER AS
  3. $BODY$
  4. DECLARE
  5. contador INTEGER;
  6. cantidad INTEGER;
  7. Fechamin DATE;
  8. Fechamax DATE;
  9. lamoda CHARACTER VARYING;
  10.     BEGIN
  11.         cantidad := COUNT(DISTINCT(auxiliar.partida)) FROM auxiliar;
  12.        
  13.         WHILE contador <= cantidad LOOP
  14.             lamoda:=  EXECUTE 'select distinct(auxiliar.partida) from auxiliar limit 1 offset' || contador;
  15.             Fechamin :=  EXECUTE 'select min(auxiliar.fecha) from auxiliar where auxiliar.partida =' || lamoda;
  16.             Fechamax :=  EXECUTE 'select max(auxiliar.fecha) from auxiliar where auxiliar.partida ='|| lamoda;
  17.             EXECUTE 'DELETE FROM la_tabla WHERE (la_tabla.fecha between' ||Fechamin|| 'and' ||Fechamax||') AND (la_tabla.partida  =' || lamoda||')';
  18.             contador :=contador+1;
  19.         END LOOP;      
  20.         RETURN 1;
  21.     END;
  22. $BODY$
  23.   LANGUAGE 'plpgsql' VOLATILE
  24.   COST 100;
  25. ALTER FUNCTION funciontotal() OWNER TO postgres;


cambie los valores que estan dentro del while como sale en el ejemplo. esta seria la forma correta?
  #6 (permalink)  
Antiguo 13/06/2011, 13:20
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Problema con funcion PostgreSQL

Cuando se trabaja con este tipo de sentencias todo es a prueba.

pruebalo y si te da algun error y no sabes donde está, postealo.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 13/06/2011, 13:21
 
Fecha de Ingreso: junio-2011
Mensajes: 5
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Problema con funcion PostgreSQL

tampoco manda error no ejecuta lo que esta dentro del while.
  #8 (permalink)  
Antiguo 14/06/2011, 07:31
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Problema con funcion PostgreSQL

ellanos.. lo que hace el execute es poder tomar una concatenación de variables y ejecutarlas como conjunto.

En este momento no tengo mucho tiempo, pero aca en el foro hay varios ejemplos de como operar variables resultantes de una consulta.

como este.
http://www.forosdelweb.com/f99/como-...9/#post2929782

fijate en el INTO. Después de tener las variables lamoda, fechamin y fechamax ahi si puedes concatenar con execute la ultima sentencia.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #9 (permalink)  
Antiguo 15/06/2011, 08:47
 
Fecha de Ingreso: junio-2011
Mensajes: 5
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Problema con funcion PostgreSQL

funciono y quedo de la siguiente manera :D
Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION funciontotal()
  2.   RETURNS INTEGER AS
  3. $BODY$
  4. DECLARE
  5. contador INTEGER :=1;
  6. cantidad RECORD;
  7. Fechamin RECORD;
  8. Fechamax RECORD;
  9. lamoda RECORD;
  10.     BEGIN
  11.         SELECT INTO cantidad  COUNT(DISTINCT(auxiliar.partida)) AS cant FROM auxiliar;
  12.        
  13.         WHILE contador <= cantidad.cant LOOP
  14.             SELECT  INTO lamoda DISTINCT(auxiliar.partida) AS moda FROM auxiliar LIMIT 1 offset contador;
  15.             SELECT  INTO Fechamin MIN(auxiliar.fecha) AS mini FROM auxiliar WHERE auxiliar.partida = lamoda.moda;
  16.             SELECT  INTO Fechamax  MAX(auxiliar.fecha) AS maxi FROM auxiliar WHERE auxiliar.partida = lamoda.moda;
  17.             DELETE FROM la_tabla WHERE (la_tabla.fecha BETWEEN Fechamin.mini AND Fechamax.maxi) AND (la_tabla.partida  = lamoda.moda);
  18.             contador :=contador+1;
  19.         END LOOP;
  20.         RETURN 1;
  21.     END;
  22. $BODY$
  23.   LANGUAGE 'plpgsql' VOLATILE
  24.   COST 100;
  25. ALTER FUNCTION funciontotal() OWNER TO postgres;

Muchas Gracias por tu Ayuda huesos52.

Etiquetas: funcion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:16.