Ver Mensaje Individual
  #3  
Antiguo 09-12-2009
lbuelvas lbuelvas is offline
Miembro
 
Registrado: may 2003
Ubicación: Colombia
Posts: 378
Reputación: 24
lbuelvas Va por buen camino
Hola foro,

Adjunto codigo fuente y datos de prueba para la tarea que solicitas

Código SQL [-]
SET SQL DIALECT 3;

CREATE TABLE DATOS (
    ID      INTEGER NOT NULL,
    FECHA   DATE NOT NULL,
    NUMERO  INTEGER NOT NULL,
    VALOR   INTEGER
);

ALTER TABLE DATOS ADD CONSTRAINT PK_DATOS PRIMARY KEY (ID);

INSERT INTO DATOS (ID, FECHA, NUMERO, VALOR) VALUES (1, '12-01-2009', 5000, NULL);
INSERT INTO DATOS (ID, FECHA, NUMERO, VALOR) VALUES (2, '12-01-2009', 4999, NULL);
INSERT INTO DATOS (ID, FECHA, NUMERO, VALOR) VALUES (3, '11-30-2009', 4998, NULL);
INSERT INTO DATOS (ID, FECHA, NUMERO, VALOR) VALUES (4, '11-30-2009', 5001, NULL);
INSERT INTO DATOS (ID, FECHA, NUMERO, VALOR) VALUES (5, '12-02-2009', 5002, NULL);
INSERT INTO DATOS (ID, FECHA, NUMERO, VALOR) VALUES (6, '12-02-2009', 4997, NULL);

SET TERM ^ ;

create or alter procedure SP_RE_NUMERAR (
    CONSECUTIVO integer)
as
declare variable ID integer;
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.id
      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^

SET TERM ; ^

GRANT SELECT,UPDATE ON DATOS TO PROCEDURE SP_RE_NUMERAR;

GRANT EXECUTE ON PROCEDURE SP_RE_NUMERAR TO SYSDBA;

Para ejecutar el procedimiento por SQL es asi:

Código SQL [-]
execute procedure sp_re_numerar (1000);
__________________
Luis Fernando Buelvas T.
Responder Con Cita