La Web del Programador: Comunidad de Programadores
 
    Pregunta:  4574 - ¿ES POSIBLE GENERAR INDICES EN UN CURSOR GENERADO EN SQL?
Autor:  Manuel Castillo Ceron
QUISIERA SABER SI SE PUEDEN GENERAR INDICES EN UN CURSOR GENERADO POR UNA INSTRUCCION EN SQL Y DE SER ESTO POSIBLE QUISIERA SABER SI SE PUEDE MANEJAR UN INDICE COMPUESTO POR DOS CAMPOS PARA PODER REALIZAR UNA BUSQUEDA.

  Respuesta:  VICTOR JOSE FUENMAYOR HERNANDEZ
Ya con la Version 7.0, puedes crear indices, en los cursores, Saludos

  Respuesta:  Hernán Ovalles
Sí es posible generar índices compuestos por varios campos sobre cursores generados a partir de una instrucción SQL. De hecho, yo siempre lo hago en mis aplicaciones cuando lo necesito, es decir, cuando necesito hacer búsquedas directas con el comando SEEK o la función SEEK(). Por ejemplo:

select * from clientes into cursor prueba
select prueba
index on desc_clie + codi_clie tag desc_clie

Tienes que tomar en cuenta que los cursores son archivos o tablas temporales y éstos se borrarán después de salir de la aplicación.

  Respuesta:  Marga del Pino
Hasta donde sé no es posible definir indices a un cursor. Como sabrás un cursor es una tabla temporal residente en memoria, que desaparece al cerrarse todas las tablas de la BD (o la BD si estás en VFP) o seaa no que da copia de ella en disco. Un cursor puede crearse ordenado. Si quieres hacer búsquedas, crea con ese mismo comando SELECT SQL una tabla (en lugar de la cláusula into cursor, utiliza into table. A continuación utiliza el comando index on, y luego de abrir la tabla indizada por ese criterio (tag) podrás hacer búsquedas con el comando seek o la función seek().

En segundo lugar, si es posible crear llaves por dos y muchos más campos, solo que la expresión de índice debe ser de caracteres, o sea, si quieres indizar por los campos código de autor N(4) y código de libro N(4) debes decir, por ejemplo:

use autlib
index on str(aut,4)+str(lib,4) tag indal
Cuando ya vayas a utilizar la tabla indizada
use autlib order tag indal
Si los dos campos son de caracteres basta concatenarlos:
index on pais+nombre ......
O sea siempre que aparezcan campos numéricos o tipo fecha en una expresión de indice hay que convertirlos a caracteres. La función de conversión de fecha a caracteres es DTOC
Espero te sirva de ayuda.