Josber, gracias por el ejemplo, no conocía el PREPARE y el EXECUTE.
No es que te esté vacilando pero... Sigo sin entenderlo.

Según tu código lo que varía es WB1, es eso? Es decir, necesitas ejecutar varias veces la misma consulta pero con WB1 distintos. ¿Es eso?
En cuanto al CURSOR: no es un start, es un SELECT + ORDER BY por decirlo de alguna forma. el FETCH no es una lectura secuencial sino lectura uno a uno de lo que el SELECT ha traído. Todo depende efectivamente del WHERE. Puedes hacer:
Código SQL:
SELECT * FROM CLIENTES
WHERE CLICOD BETWEEN :WB1 AND :WB2
-- o también
SELECT * FROM CLIENTES
WHERE CLICOD BETWEEN IN (...)
-- o también
SELECT * FROM CLIENTES
WHERE CLICOD BETWEEN = ... OR ...
Si lo que varía es el SELECT * pues tampoco veo mayor problema...
Con todo esto quiero decir que no me estoy enterando en qué es imprescindible el PREPARE. Vale que se puede montar la query en dinámico pero normalmente se puede evitar.