Oracle - Manejo de un type record de oracle

 
Vista:
sin imagen de perfil
Val: 8
Ha disminuido su posición en 2 puestos en Oracle (en relación al último mes)
Gráfica de Oracle

Manejo de un type record de oracle

Publicado por Tomás (6 intervenciones) el 18/03/2019 14:10:39
Hola a todos,

Estoy tratando datos mediante un TYPE record, concretamente necesito saber cuanto usuarios hay en cada departamento y cuantos tienen el email informado. He intentado de varias maneras pero no consigo resultados. Mas o menos he montado esto, pero no consigo agrupar los datos para sacarlo ¿Como podría hacerlo?... si se puede:

Ejemplo:
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
DECLARE
 
    TYPE TY_PRUEBA IS RECORD
    (
     nombre              VARCHAR2(20),
     email               VARCHAR2(50),
     departamento        VARCHAR2(2)
    );
 
    TYPE INS_PRUEBA IS TABLE OF TY_PRUEBA INDEX BY PLS_INTEGER;
     T_PRUEBA   INS_PRUEBA;
 
  CURSOR C_PRUEBA IS
    SELECT T_PRUEBA.departamento, COUNT(T_PRUEBA.nombre) CONTADOR, COUNT(T_PRUEBA.email) emails
      FROM T_PRUEBA
     GROUP BY T_PRUEBA.departamento;
 
BEGIN
T_PRUEBA(1).nombre       := 'PEPE';
T_PRUEBA(1).email       := '1@a.com';
T_PRUEBA(1).departamento := 'PR';
T_PRUEBA(2).nombre       := 'PACO';
T_PRUEBA(2).email       := '1@a.com';
T_PRUEBA(2).departamento := 'PR';
T_PRUEBA(3).nombre       := 'ARI';
T_PRUEBA(3).email       := '1@a.com';
T_PRUEBA(3).departamento := 'PR';
T_PRUEBA(4).nombre       := 'MARCO';
T_PRUEBA(4).email       := '1@a.com';
T_PRUEBA(4).departamento := 'PR';
T_PRUEBA(5).nombre       := 'PECK';
T_PRUEBA(5).email        := '';
T_PRUEBA(5).departamento := 'CO';
T_PRUEBA(6).nombre       := 'DIEGO';
T_PRUEBA(6).email       := '';
T_PRUEBA(6).departamento := 'CO';
T_PRUEBA(7).nombre       := 'JESUS';
T_PRUEBA(7).email       := '';
T_PRUEBA(7).departamento := 'CO';
T_PRUEBA(8).nombre       := 'TOMAS';
T_PRUEBA(8).email       := '8@a.com';
T_PRUEBA(8).departamento := 'JF';
T_PRUEBA(9).nombre       := 'EMILIO';
T_PRUEBA(9).email       := '9@a.com';
T_PRUEBA(9).departamento := 'AD';
T_PRUEBA(10).nombre       := 'ALBERTO';
T_PRUEBA(10).email       := '10@a.com';
T_PRUEBA(10).departamento := 'SG';
 
FOR C IN C_PRUEBA LOOP
  DBMS_OUTPUT.PUT_LINE('Departamento: '|| c.departamento||'; contador: '||c.contador);
 
END LOOP;
 
END;

Muchas gracias de antemano.
Un saludo.
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: 499
Oro
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

Manejo de un type record de oracle

Publicado por Rafael (328 intervenciones) el 19/03/2019 10:29:07
Hola, Tomás:

En principio vas por buen camino ... pero hay conceptos que no se pueden mezclar....

Has creado un TABLE pero NO lo puedes usar en un SELECT.

Ahora bien lo que tienes es que iterar uno a uno los registros sumar e
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
sin imagen de perfil
Val: 8
Ha disminuido su posición en 2 puestos en Oracle (en relación al último mes)
Gráfica de Oracle

Manejo de un type record de oracle

Publicado por Tomás (6 intervenciones) el 19/03/2019 10:39:34
Hola Rafael,

Gracias por contestar. La select era como ejemplo de lo que quería hacer.

Investigando no he visto ninguna forma de hacerlo a si que me estoy planteando crear una tabla y hacerlo a partir de ahí aunque no sea lo más optimo.

La solución que me propones no me es viable ya que hay más de 100 departamentos y lo peor de todo es que algún nombre puede estar repetido, con y sin email, pero eso ya lo trataría con las condiciones.

De cualquier manera, muchas gracias.

Un saludo.
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
sin imagen de perfil
Val: 499
Oro
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

Manejo de un type record de oracle

Publicado por Rafael (328 intervenciones) el 19/03/2019 13:13:12
Hola, Tomás:

Pero a ver si tienes mas de 100 departamentos es que tienes mas de 100 empleados...

Luego LO MAS OPTIMO es crear la tabla tal cual...

Como lo estas haciendo NO es OPTIMO tienes que cargar la variable con todos los datos a mano ... eso si que no es optimo ...
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