6 de octubre de 2003

Contadores (punteros) Alternativa SQL

Pues eso, aqui teneis un ejemplo de como obtener nuevos codigos (disponibles) en una tabla cuyo indice principal sea numerico. P.E. Clientes, proveedores, etc.

Nos permite decidir el valor minimo por el que realizar la busqueda de un 'hueco'
PARAMETERS pcTabla, pcCampo, pnCodigo
* pcTabla : Tabla en la que buscar
* pcCampo : Campo en el que buscar
* pnCodigo : Opcional, indica el minimo para buscar

* AHORA VARIABLES LOCALES
LOCAL lnCodigoMin
IF PCOUNT()>2
 * se ha pasado codigo minimo
  lnCodigoMin = pnCodigo
ELSE
 * No se ha pasado
  lnCodigoMin = 0
ENDIF

* a) Nos aseguramos de tener la tabla abierta
IF !USED(pcTabla)
  USE (pcTabla) IN 0 SHARED
ENDIF

* ahora montamos la consulta
SELECT MIN(&pcCampo+1) AS NuevoCod ;
FROM &pcTabla ;
WHERE &pcCampo>lnCodigoMin .and.;
 !deleted() .and. ;
!&pcCampo+1 IN ;
(SELECT DISTINC &pcCampo FROM &pcTabla) ;
INTO CURSOR oNew

* Comentar las dos siguientes lineas,
* es solo para chequeo.

? 'Valor Obtenido : '
?? oNew.NuevoCod
* devolvemos nuevo codigo
return oNew.NuevoCod

***********  FIN  *******
Javier Amoros

1 comentario :