Plsql - problema con la sentencia IN

ANA
20 de Septiembre del 2004
Tengo un store procedure en el que recibo un parametro varchar llamado asi(PAR1). Este parametro que recibe es una cadena como esta '1','2','3','4'. Cada uno de estos valores(1,2,3,4) son indice de una tabla llamada categorias y lo que yo quiero hacer es incluir este pararametro que recibo en una sentencia IN por ejemplo: SELECT * FROM CATEGORIA WHERE IDCATEGORIA IN (PAR1). El problema es que la sentencia IN no me busca cada indice sino que me toma la cadena entera. La sentencia tendria que quedar asi SELECT * FROM CATEGORIA WHERE IDCATEGORIA IN ( '1','2','3','4') para que me busque todas las categorias que tegan el indice igual a 1 o 2 o 3 o 4 pero no lo hace, pienso que la sentcia busca una categoria cuyo indice sea igual a ('1','2','3','4') todos juntos no por separado. Le agradezco que me ayuden en esto ya que lo necesito con urgencia
Mil Gracias!!

Jos?ntonio
20 de Septiembre del 2004
Hola,

La forma correcta sería crea un dml dinámica, y para ello te creas una variable donde guardas la dml y luego la executas con el comando 'execute immediate'. Sería algo así

declare
v_sql varchar2(2000);
begin
V_SQL := 'SELECT * FROM CATEGORIA WHERE IDCATEGORIA IN (' || PAR1 || ')';

EXECUTE IMMEDIATE V_SQL;

END;

Espero te ayude

Pablo Ponte Miserendino
20 de Septiembre del 2004
No me parece la mejor forma de solucionar ese problema....
Quizas si me das mas detalles sobre el proc. te puedo dar una solución alternativa....ami se me ocurre mejor loopear de alguna manera....quizas si buscas por separado tantas veces como comas tenga la cadena, cortando los caracteres entre las comas y usando = en vez de IN...
Pero te repito....quizas si me das mas datos te puedo dar mejores ideas....

Salu2