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);