SQL - Ordenar informacion dentro de PL/SQL

 
Vista:

Ordenar informacion dentro de PL/SQL

Publicado por Karen Vega (5 intervenciones) el 25/08/2016 23:48:19
Hola a todos:

Aclaro que no soy programador ni ingeniero, pero trabajo en el area de sistemas, y estoy aprendiendo a hacer PL/SQL. Me encuentro detenida porque ya me dio resultado mi PL, dentro de este resultado hay informacion que quiero digamos "comparar". Para explicarme mejor: Me piden cambiar el nombre de MMMA a MMMC, entonces lo que hice fue validar que dentro de mi base de datos no exista ya activo MMMC. Ahora, mediante un IF puse condiciones de que, si lo encuentra activo, me mande un mensaje "MMMC ya existe, favor de validar". Lo mismo con MMMA, porque existe la posibilidad de que no exista en la base y pidan cambiarle el nombre. Suponiendo que tengo mas registros por buscar, sería: todos los MMMA (elemento anterior) y todos los MMMC (elementos nuevos). Mi resultado es algo similar a esto:

Se ha encontrado el MMMA,1 veces activo
----------------------------------------------------------------------------
No se ha encontrado el MMMC activo
-----------------------------------------------------------------------------
Se ha encontrado el MMMA2 ,1 veces activo
----------------------------------------------------------------------------
No se ha encontrado el MMMC2 activo

Lo que quiero hacer es ordenar la informacion, para que me muestre primero los MMMA, existan o no, y despues, los MMMC, existan o no.

¿Hay alguna forma de hacerlo? Les agradezco de antemano su atención y sus valiosísimos comentarios.
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: 109
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Ordenar informacion dentro de PL/SQL

Publicado por Rafael (111 intervenciones) el 26/08/2016 08:08:06
Hola Karen

Es un poco complejo ayudarte, ya que te has explicado perfectamente lo que quieres, pero...

1. No nos muestras que haces, con lo cual es casi imposible decirte que cambiar o corregir para hacer lo que quieres hacer, y cuando digo no nos muestras que haces, lee, no nos pones tu código.

2. Lo fácil seria decirte que pusieras un ORDER BY, pero es difícil saber si con eso te ayudamos, por que sin ver tu query... ver punto 1

Así pues ayúdate primero ayudándonos, pon que estas haciendo (el PL) y seguro alguien te dice que hacer,

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

Ordenar informacion dentro de PL/SQL

Publicado por Karen Vega (5 intervenciones) el 26/08/2016 16:57:21
Hola Rafael

Mil gracias por tus comentarios, aqui les comparto el código que hice =)


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
DECLARE
vSA VARCHAR2(15);
vSN VARCHAR2(15);
vResultadoa number;
vResultadon number;
 
    CURSOR SITES  IS
    SELECT SITEA,SITEN
    FROM REL_S;
 
BEGIN
	  OPEN SITES;
    LOOP
		FETCH SITES INTO vSA, vSN;
    EXIT when SITES%NOTFOUND;
 
 
   select count(*) into vResultadoa from tabla where site=vSA;
 
       if (vResultadoa = 0) THEN
    DBMS_OUTPUT.put_line('No se ha encontrado el sa ' || vSA || ' activo ');
    else
    DBMS_OUTPUT.put_line('Se ha encontrado el sa ' || vSA || ',' || vResultadoa || ' veces activo');
    end if;
 
 
     select count(*) into vResultadon from tabla  where site=vSN;
      if (vResultadon = 0) THEN
          DBMS_OUTPUT.put_line(' ---------------------------------------------------------------------------- ');
          DBMS_OUTPUT.put_line('No se ha encontrado el sn ' || vSN|| ' activo');
          DBMS_OUTPUT.put_line(' ----------------------------------------------------------------------------- ');
    else
    DBMS_OUTPUT.put_line(' ------------------------------------------------------------------------------------------------------------------------------- ');
    DBMS_OUTPUT.put_line('Se ha encontrado el sn ' || vSN || ',' || vResultadon || ' veces activo');
    DBMS_OUTPUT.put_line(' ------------------------------------------------------------------------------------------------------------------------------- ');
    end if;
      END LOOP;
      CLOSE SITES;
 
END;


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
Imágen de perfil de Alain
Val: 7
Ha aumentado su posición en 2 puestos en SQL (en relación al último mes)
Gráfica de SQL

Ordenar informacion dentro de PL/SQL

Publicado por Alain (3 intervenciones) el 26/08/2016 20:16:25
Hola Karen

Creo que con el código que muestras un ORDER BY de SQL no va a ayudarte a conseguir, porque el asunto no está en la consulta de extracción sino que en cada iteración el mismo LOOP muestras primero algo de MMMA y luego algo de MMMC. Creo que una solución (aunque puede que no sea la más elegante) sería la que te pongo a continuación a partir de lo que tienes ya hecho. En este código te he separado la parte de MMMA y la de MMMC, de forma que primero se ejecute todo lo de MMMA y luego lo de MMMC. No sé nada de pl/sql y lo que me queda duda es si el mismo nombre de cursor se puede usar dos veces. Pero igual si te da problemas le cambias el nombre y resuelto. Espero te ayude, saludos!!

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
DECLARE
vSA VARCHAR2(15);
vSN VARCHAR2(15);
vResultadoa number;
vResultadon number;
 
CURSOR SITES IS
SELECT SITEA
FROM REL_S;
 
BEGIN
OPEN SITES;
LOOP
FETCH SITES INTO vSA;
EXIT when SITES%NOTFOUND;
 
select count(*) into vResultadoa from tabla where site=vSA;
 
if (vResultadoa = 0) THEN
DBMS_OUTPUT.put_line('No se ha encontrado el sa ' || vSA || ' activo ');
else
DBMS_OUTPUT.put_line('Se ha encontrado el sa ' || vSA || ',' || vResultadoa || ' veces activo');
end if;
 
END LOOP;
CLOSE SITES;
 
CURSOR SITES IS
SELECT SITEN
FROM REL_S;
 
BEGIN
OPEN SITES;
LOOP
FETCH SITES INTO vSN;
EXIT when SITES%NOTFOUND;
 
select count(*) into vResultadon from tabla where site=vSN;
if (vResultadon = 0) THEN
DBMS_OUTPUT.put_line(' ---------------------------------------------------------------------------- ');
DBMS_OUTPUT.put_line('No se ha encontrado el sn ' || vSN|| ' activo');
DBMS_OUTPUT.put_line(' ----------------------------------------------------------------------------- ');
else
DBMS_OUTPUT.put_line(' ------------------------------------------------------------------------------------------------------------------------------- ');
DBMS_OUTPUT.put_line('Se ha encontrado el sn ' || vSN || ',' || vResultadon || ' veces activo');
DBMS_OUTPUT.put_line(' ------------------------------------------------------------------------------------------------------------------------------- ');
end if;
END LOOP;
CLOSE SITES;
 
 
END;
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

Ordenar informacion dentro de PL/SQL

Publicado por Karen Vega (5 intervenciones) el 26/08/2016 21:11:20
Hola Alain

Te agradezco muchisímo el apoyo y tu tiempo, te comento que lo ejecuté como me sugeriste y si me dio el resultado que esperaba. Usé dos veces el nombre del cursor como mencionas, abriendo y cerrando el loop y si funcionó, hemos aprendido algo nuevo de PL/SQL el día de hoy =)

Saludos y muchas gracias.
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