SQL - USAR EL CONTENIDO DE UN VARCHAR DE UN ALMACENADO

   
Vista:

USAR EL CONTENIDO DE UN VARCHAR DE UN ALMACENADO

Publicado por TUXTENO (20 intervenciones) el 02/10/2009 16:47:31
Hola Foro
Mi problema es el siguiente: En un procedimiento almacenado paso como parametro un String de java a un varchar de Db2, es decir, una cadena como miCadena='1,2,3,4,5' y al recuperarla dentro del almacenado necesito usar esos valores en una condición IN de SQL es decir, algo como SELECT * FROM MiTabla WHERE clave IN (miCadena), pero como es un varchar me lo toma como si fuera SELECT * FROM MiTabla WHERE clave IN ('1,2,3,4,5') y lo que en realidad necesito es SELECT * FROM MiTabla WHERE clave IN (1,2,3,4,5) sin las comillas.
Alguien tiene alguna idea como resolver esto?
De antemano, Gracias
Saludos
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

Posible solución...

Publicado por Leopoldo Taylhardat (89 intervenciones) el 06/10/2009 03:15:42
Saludos....
Creas una función en la bd que le pasas el valor o (dentro del procedimiento) que le pasas la cadena (en este caso con las comillas) y te devuelva el valor sin comillas...
Ej. función 'f_reemplazar'...
SELECT * FROM MiTabla WHERE f_remplazar(clave) IN (1,2,3,4,5)

Nota... ahora como programar la función en db2 no lo sé porque trabajo con Sybase... pero ahí te va mi función que espero que te sirva de guía..

en este caso mi función trabaja con tres parametros:
1) cadena de datos (@TEXTO)
2) texto a reemplazar (@BUSCA)
3) texto a colocar (@CAMBIA)

create function dba.F_REEMPLAZAR(in @TEXTO varchar(32000),in @BUSCA varchar(256),in @CAMBIA varchar(256))
returns varchar(32000)
begin
declare @UBICA integer;
-- ENTRA A PROCESO SI LA CADENA CONTIENE DATOS...
if LENGTH(@TEXTO)>0 then
-- BUSCA LA PRIMERA OCURRENCIA ...
set @UBICA=LOCATE(@TEXTO,@BUSCA);
-- UNICAMENTE ENTRA AL LOOP SI ENCUENTRA Y SE REPITE MIENTRAS HAYA OCURRENCIA...
while @UBICA>0 loop
-- REEMPLAZA
set @TEXTO=STUFF(@TEXTO,@UBICA,LENGTH(@BUSCA),@CAMBIA);
-- SE DESPLAZA '@UBICA' CON LONGITUD DEL REEMPLAZO...
-- EJEMPLO: REEMPLAZAR 'CALLE' POR 'CALLEJON...'
set @UBICA=@UBICA+LENGTH(@CAMBIA);
-- BUSCA LA SIGUIENTE OCURRENCIA Y REPITE EL CICLO SI LA HAY...
set @UBICA=LOCATE(@TEXTO,@BUSCA,@UBICA)
end loop
end if;
return(@TEXTO)
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

RE:Posible solución...

Publicado por tuxteno (4 intervenciones) el 06/10/2009 16:48:00
Agradezco la colaboración, intentare hacer algo similar para DB2
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