PostgreSQL - Ayuda funcion contar con parámetros

 
Vista:
sin imagen de perfil

Ayuda funcion contar con parámetros

Publicado por Manu (1 intervención) el 06/11/2013 16:31:13
Buenas tardes,

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.

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.

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:

1
2
3
4
5
6
7
8
9
10
11
12
CREATE OR REPLACE FUNCTION compempleados (cuentaoficinas integer)
RETURNS numeric AS
 
DECLARE
numempleados integer;
BEGIN
numempleados = 0;
          FOR numempleados IN SELECT a.id_oficina, count(*) FROM personal.trabajadores GROUP BY a.id_oficina LOOP
RETURN NEXT numempleados;
END LOOP;
END;
LANGUAGE plpgsql VOLATILE

Ahora mismo no puedo probarlo en pgAdminIII, pero no tengo muy claro primero que esta funcion sea correcta, y por otro lado creo que me falta la opción de poder consulta sin pasar parámetro (en caso de poner: ") y devuelva la cuenta de todos los empleados.

Sé que tiene que sonarle muy fácil al que entienda pero estoy en mis primeros pasos y todavía me atasco.

Puede alguien orientarme?

Gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 14
Ha aumentado 1 puesto en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

Ayuda funcion contar con parámetros

Publicado por Rafael (21 intervenciones) el 03/03/2014 12:35:15
Hola:

Algunos errores conceptuales:

1. El parámetro que pasas segun enuncias el problema debe ser opcional no obligatorio como lo has declarado.
2. Debes contar solo aquellos emplados que coincidan con la oficina seleccionada y en caso de no seleccionar todos los empleados sin importar la oficina.
3. El loop esta demas....

Tu función debería ser algo tal que así:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CREATE OR REPLACE FUNCTION cuenta_empleados (v_oficina integer DEFAULT 0)
RETURNS numeric AS
   DECLARE empleados integer;
BEGIN
   empleados = 0;
 
   IF v_oficina = 0 THEN
       SELECT COUNT(*)
       INTO empleados
       FROM personal.trabajadores;
   ELSE
       SELECT COUNT(*)
       INTO empleados
       FROM personal.trabajadores
       WHERE oficina = v_oficina;
   END IF;
 
   RETURN numempleados;
END;
LANGUAGE plpgsql VOLATILE

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda funcion contar con parámetros

Publicado por Juan (9 intervenciones) el 19/05/2016 18:19:21
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
CREATE OR REPLACE FUNCTION cuenta_empleados (v_oficina integer DEFAULT 0)
 
RETURNS numeric AS
 
   DECLARE empleados integer;
 
BEGIN
 
   empleados = 0;
 
 
 
   IF v_oficina = 0 THEN
 
       SELECT COUNT(*),oficina
 
       INTO empleados
 
       FROM personal.trabajadores;
      group by  oficina;
      order by oficina
 
   ELSE
 
       SELECT COUNT(*)
       INTO empleados
       FROM personal.trabajadores
 
       WHERE oficina = v_oficina;
 
   END IF;
 
 
 
   RETURN numempleados;
 
END;
 
LANGUAGE plpgsql VOLATILE
 
--  Esto puede ser?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar