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

[SOLUCIONADO] [ayuda]problema con función en pgsql

Estas en el tema de [ayuda]problema con función en pgsql en el foro de PostgreSQL en Foros del Web. saludos, esta función cuando la ejecuto me borra los datos de la tabla conceptodetalle, como si no tomara en cuenta la clausula where, y si ...
  #1 (permalink)  
Antiguo 10/07/2013, 10:42
Avatar de ichigohollow  
Fecha de Ingreso: octubre-2009
Mensajes: 38
Antigüedad: 11 años, 9 meses
Puntos: 1
Pregunta [ayuda]problema con función en pgsql

saludos, esta función cuando la ejecuto me borra los datos de la tabla conceptodetalle, como si no tomara en cuenta la clausula where, y si descomento las otras lineas me borra el contenido de las 3 tablas.
Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION borrarnomina(id_nomina INTEGER)
  2.   RETURNS INTEGER AS
  3. $$
  4. DECLARE
  5. tempo INTEGER;
  6. id alias FOR $1;
  7.  
  8. BEGIN
  9. RAISE NOTICE 'id(%)', id;
  10. DELETE FROM ONLY conceptodetalle WHERE id_nomina=id;
  11. --execute cadena into tempo;
  12. --if (FOUND)
  13.   -- then
  14.     --  delete from only detallenomina where id_nomina=$1;
  15. --      execute cadena into tempo;
  16.       --if (FOUND)
  17.         -- then
  18.           --  delete from only nomina where id_nomina=$1;
  19.             --execute cadena into tempo;
  20.             --if (FOUND) --tempo
  21.               -- then
  22. --                  commit;
  23.                 --  return 1;
  24.                --else
  25.                  -- rollback;
  26.                   --return 0;
  27.          --   end if;
  28.          --else
  29.            -- rollback;
  30.            -- return 0;
  31.       --end if;
  32.    --else
  33.      -- rollback;
  34.       --return 0;
  35. --end if;
  36. RETURN 1;
  37. END;
  38. $$
  39.   LANGUAGE 'plpgsql';

destaco que las tablas estan relacionados de la siguiente manera
nomina clave primaria: id_nomina
detallenomina clave primaria: (id_nomina , nronom); fk: id_nomina
concepto detalle clave primaria: (id_nomina, nronom, ccon); fk: (id_nomina,nronom)

no le veo ni pies ni cabeza. el raise notice lo coloque para saber si el parametro de entrada lo estaba tomando bien. alguna ayuda please..!!

edit: quiero agregar que si el delete lo ejecuto como una sentencia sql comun, el delete se ejecuta perfectamente, solo borrando los registros cuyo id_nomina sea el especificado.

Última edición por gnzsoloyo; 11/07/2013 a las 09:29
  #2 (permalink)  
Antiguo 10/07/2013, 13:09
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 12 años, 5 meses
Puntos: 360
Respuesta: [ayuda]problema con función en pgsql

La verdad simulé tu escenario, y me respeta el where.
Solo me borra el registro que le paso.


Prueba sin hacer uso de alias y nombrando el campo de entrada diferente a la columna.
Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION borrarnomina(v_id_nomina INTEGER)
  2. RETURNS INTEGER AS
  3. $$
  4. DECLARE
  5. tempo INTEGER;
  6. BEGIN
  7. DELETE FROM ONLY conceptodetalle WHERE id_nomina=v_id_nomina;
  8. --execute cadena into tempo;
  9. --if (FOUND)
  10. -- then
  11. -- delete from only detallenomina where id_nomina=$1;
  12. -- execute cadena into tempo;
  13. --if (FOUND)
  14. -- then
  15. -- delete from only nomina where id_nomina=$1;
  16. --execute cadena into tempo;
  17. --if (FOUND) --tempo
  18. -- then
  19. -- commit;
  20. -- return 1;
  21. --else
  22. -- rollback;
  23. --return 0;
  24. -- end if;
  25. --else
  26. -- rollback;
  27. -- return 0;
  28. --end if;
  29. --else
  30. -- rollback;
  31. --return 0;
  32. --end if;
  33. RETURN 1;
  34. END;
  35. $$
  36. LANGUAGE 'plpgsql';
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 10/07/2013, 14:10
Avatar de ichigohollow  
Fecha de Ingreso: octubre-2009
Mensajes: 38
Antigüedad: 11 años, 9 meses
Puntos: 1
Respuesta: [ayuda]problema con función en pgsql

lo extraño es que lo he probado en 2 servidores distintos y fue el mismo resultado, limpieza de la tabla, de momento para avanzar en el problema cree una función bajo lenguaje sql, la quería en pgsql para poder controlar/manejar errores... :/

he de suponer ya que a ti no te da error alguno es que sea alguna configuración de servidor, de tabla o cuestión de brujerías

gracias por tu respuesta huesos52 ...

PS. no cambiaré el estatus a solucionado por un tiempo por si a alguien mas se le ocurre el por que...
  #4 (permalink)  
Antiguo 10/07/2013, 14:14
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 12 años, 5 meses
Puntos: 360
Respuesta: [ayuda]problema con función en pgsql

cambia esto:
Código SQL:
Ver original
  1. DELETE FROM ONLY conceptodetalle WHERE id_nomina=id;

por:
Código SQL:
Ver original
  1. EXECUTE 'DELETE FROM only conceptodetalle WHERE id_nomina='||id;

Nos cuentas
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 11/07/2013, 08:20
Avatar de ichigohollow  
Fecha de Ingreso: octubre-2009
Mensajes: 38
Antigüedad: 11 años, 9 meses
Puntos: 1
Respuesta: [ayuda]problema con función en pgsql

saludos, si con el execute me funcionó perfectamente, lo único fue que tuve que usar el "get diagnostic " para saber si se ejecuto perfectamente dado que el "found" no funcionaba.
Muchas gracias huesos52.

Etiquetas: delete, function
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 04:13.