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

PL/PGSQL Funcion contar valores con FOR pasando parámetros

Estas en el tema de PL/PGSQL Funcion contar valores con FOR pasando parámetros en el foro de PostgreSQL en Foros del Web. Hola a todos, Soy primerizo en PostgreSQL y el lenguaje PL/pgSQL, y tengo una duda sobre un ejercicio que estoy haciendo a ver si alguien ...
  #1 (permalink)  
Antiguo 13/11/2013, 05:47
 
Fecha de Ingreso: noviembre-2013
Mensajes: 1
Antigüedad: 11 años
Puntos: 0
PL/PGSQL Funcion contar valores con FOR pasando parámetros

Hola a todos,

Soy primerizo en PostgreSQL y el lenguaje PL/pgSQL, y tengo una duda sobre un ejercicio que estoy haciendo a ver si alguien me la puede aclarar. La verdad es que he estado dando vueltas y vueltas sin encontrar ejemplos claros sobre como funcionan las funciones en general y las funciones con parámetros en particular.

A ver si lo explico con claridad.

Supongamos que tengo una base de datos llamada "empresa", un esquema llamado "personal" y dentro de este esquema una tabla llamada "trabajadores" que tiene los campos id_trabajador, nombre, apellidos, telefono, id_oficina que referencia a otra tabla de oficinas de un esquema llamado "comercial".

El ejercicio me pide que cuente a todos los trabajadores que haya en una oficina determinada, dando el código de oficina como parámetro y si no se pone el código se debe entender que se contarán a todos los trabajadores.

Hasta donde llego, la función podría ser esta:

Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION compempleados (cuentaoficinas INTEGER)
  2. RETURNS NUMERIC AS
  3.  
  4. DECLARE
  5. numempleados INTEGER;
  6. BEGIN
  7. numempleados = 0;
  8. FOR numempleados IN SELECT a.id_oficina, COUNT(*) FROM personal.trabajadores GROUP BY a.id_oficina LOOP
  9. RETURN NEXT numempleados;
  10. END LOOP;
  11. END;
  12. LANGUAGE plpgsql VOLATILE

Cualquiera que sepa algo de pl/pgsql verá no sólo que esta función está mal sino que además no tengo ni idea. Sé que no es excesivamente complicado pero al no encontrar ejemplos claros como sí hay en SQL, me estoy liando a base de bien.

Puede alguien orientarme?

Gracias de antemano

Última edición por gnzsoloyo; 13/11/2013 a las 10:00
  #2 (permalink)  
Antiguo 13/11/2013, 15:02
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: PL/PGSQL Funcion contar valores con FOR pasando parámetros

<saludos>
Uhm, pues creo que te estas enredando en algunas cosas (aunque para estar primerizo no estás tan perdido, yo en mis inicios estaba más bloqueado en eso!), porque el loop que agregas es para ir realizando un ciclo, es decir, que sería genial si necesitas recorrer oficina por oficina, pero el caso es que necesitas es obtener la cantidad de empleados filtrados por una oficina, en cuyo caso creo que lo mejor es lo siguiente (querys de prueba, debes cambiarlos a tus tablas)

Propongo simplificar la función de este modo

Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION compempleados (cuentaoficinas INTEGER)
  2. RETURNS INTEGER AS
  3. $BODY$
  4. DECLARE
  5. numempleados INTEGER;
  6. BEGIN
  7. numempleados = 0;
  8. IF cuentaoficinas > 0 THEN
  9.     SELECT COUNT(id) FROM empleados WHERE idof = cuentaoficinas INTO numempleados;
  10. ELSE
  11.     SELECT COUNT(id) FROM empleados INTO numempleados;
  12. END IF;
  13. RETURN numempleados;
  14. END;$BODY$
  15. LANGUAGE plpgsql VOLATILE

</saludos>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

Última edición por mortiprogramador; 07/02/2014 a las 12:40

Etiquetas: as, funcion, group, pasando, postgres
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 07:14.