Ver Mensaje Individual
  #4  
Antiguo 09-12-2009
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.070
Reputación: 32
jhonny Va camino a la famajhonny Va camino a la fama
Me gustaría proponer la siguiente "pequeña" modificación al procedimiento que nos muestra lbuelvas, para que sea probado y comentar sobre los resultados obtenidos...

Teniendo en cuenta que todas las tablas de Firebird tienen el campo rdb$db_key, del cual parece, se puede usar unicamente dentro de la misma "transacción", entonces probemos lo siguiente y comentar si les ha parecido mas rapido, igual, mas lento o si hizó o no... lo que tenia que hacer.

Código SQL [-]
create or alter procedure SP_RE_NUMERAR (
    CONSECUTIVO integer)
as
DECLARE VARIABLE ID CHAR(8);
begin
  -- Procedimiento para llenar el campo 'datos.valor' con un consecutivo de
  -- forma que al consultar la tabla 'datos' ordenado por el campo 'datos.valor'
  -- los registros se vean ordenados por los campos 'datos.fecha' y
  -- 'datos.numero'.

  if (consecutivo is null) then
    consecutivo = 1;

  for select datos.rdb$db_key
      from datos
      order by datos.fecha,  datos.numero
      into :id
  do begin
    update datos
    set    datos.valor = :consecutivo
    where  datos.id = :id;
    consecutivo = consecutivo + 1;
  end
end^

Dicen que es mas rapido, que incluso la llave primaria... esta es una posible buena oportunidad, para probar si es eso cierto o no .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita