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

Duda consulta PL/SQL

Estas en el tema de Duda consulta PL/SQL en el foro de Bases de Datos General en Foros del Web. Alguien que me pueda dar una mano con esta duda sobre una consulta en PL/SQL lo voy a hacer en un ejemplo sencillo el resultado ...
  #1 (permalink)  
Antiguo 05/08/2010, 05:52
Avatar de titocba  
Fecha de Ingreso: agosto-2008
Ubicación: Cordoba
Mensajes: 256
Antigüedad: 15 años, 8 meses
Puntos: 4
Pregunta Duda consulta PL/SQL

Alguien que me pueda dar una mano con esta duda sobre una consulta en PL/SQL
lo voy a hacer en un ejemplo sencillo

el resultado que busco es que mi consulta ejecute lo siguiente

select * from usuario
where id_usuario in('22','33')

Ahora bien, al ser estos id muchos mas de los que aparecen en este ejemplo y al yo tener que usuarlo en muchas consultas decidi meterlos en una variable, pero cuando paso esa variable a la consulta no me trae resultados, creo que es porque me esta tomando los id que necesito como un solo id y no toma la separacion de , que necesita el in

ejemplo de declaracion de esta variable que probe y no me funciona

vid_usuario VARCHAR2 (500) := '''22'',''33''';
vid_usuario VARCHAR2 (500) := '22,33';

y muchas variantes mas

alguien me podria decir como puedo darle solucion a este problema

gracias
  #2 (permalink)  
Antiguo 05/08/2010, 07:02
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Duda consulta PL/SQL

De que tipo es id_usuario? Number, Varchar?

Puedes probar haciendo una concatenación en la consulta.

algo como:
Execute immediate "select * from usuario where id_usuario in(" || variable || ")";
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 05/08/2010, 07:11
Avatar de titocba  
Fecha de Ingreso: agosto-2008
Ubicación: Cordoba
Mensajes: 256
Antigüedad: 15 años, 8 meses
Puntos: 4
Respuesta: Duda consulta PL/SQL

es de tipo VARCHAR.
Es lo que estuve intentando hacer pero no trae resultados, es como que la concatenacion que tu dices la toma como un solo string y no interpreta las comas nose si me explico.
Imprimo las mismas variables antes de concatenarlas al query y estas son correctas.


ejemplo de codigo para que me entiendas

Código:
declare
vid_usuario         VARCHAR2 (500)
      := '''44'',''54''';
begin

for regfgfg IN(select count(*) as cantidad from clientes
where id_cliente in (vid_usuario))
LOOP
dbms_output.put_line(regfgfg.cantidad);
END LOOP;

end;

probe escribiendo la variable de diferentes maneras.
si yo imprimo el valor de las variables con un dbms estas llegan bien, si a las mismas las copia dentro del in la consulta trae resultado
  #4 (permalink)  
Antiguo 05/08/2010, 08:39
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Duda consulta PL/SQL

Mira esto
http://www.devjoker.com/contenidos/T...-Dinamico.aspx

No estoy seguro si el tipo de cursor que utilizas se pueda hacer lo que requieres. En la pagina hay ejemplos con cursores explicitos previamente declarados.

Por otro lado, veo que tu consulta solo trae un count. Osea que siempre regresaría un unico valor. No sería mas facil hacer uso de un cursor implicito y mandarlo a una variable?
SELECT COUNT(*) INTO variable ?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 05/08/2010, 10:42
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Duda consulta PL/SQL

sería algo así:

Código SQL:
Ver original
  1. DECLARE
  2. TYPE CUR_TYP IS REF CURSOR;
  3. c_consulta CUR_TYP;
  4. vid_usuario VARCHAR2(500) := '''44'',''54''';
  5. v_consulta VARCHAR2(500);
  6. cantidad NUMBER;
  7. BEGIN
  8. v_consulta := '
  9. SELECT COUNT(*) cantidad
  10. FROM clientes WHERE id_cliente IN('|| vid_usuario || ')
  11. ';
  12. OPEN c_consulta FOR v_consulta;
  13. LOOP
  14. FETCH c_consulta INTO cantidad;
  15. EXIT WHEN c_consulta%NOTFOUND;
  16. dbms_output.put_line(cantidad);
  17. END LOOP;
  18. CLOSE c_consulta;
  19. END;
  20. /
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #6 (permalink)  
Antiguo 09/08/2010, 12:16
Avatar de titocba  
Fecha de Ingreso: agosto-2008
Ubicación: Cordoba
Mensajes: 256
Antigüedad: 15 años, 8 meses
Puntos: 4
Respuesta: Duda consulta PL/SQL

huesos52 muchas gracias por tu tiempo, es como tu planteas en el ultimo post la solucion que ya tenia en mano, mi problema pasaba por el hecho de que no queria pasar mis consultas a una variable.
Pero aparentemente no hay alternativa.

Etiquetas: bases-de-datos
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 11:08.