Hola de nuevo !
.... no lo entiendo ....
Intento crear un Stored Procedure complejo, del cual las primeras sentencias son las que pongo a continuación :
Código Delphi
[-]CREATE OR ALTER PROCEDURE NEW_PROCEDURE2 (
in_random decimal(12,0))
returns (
out_random decimal(12,0))
as
declare variable aux_rand decimal(12,0);
declare variable aux_true integer;
begin
AUX_TRUE = 0;
while (:"AUX_TRUE" = 0) do begin
Select RANDOMNO from AVAIL_CALC_TEMP
where RANDOMNO = :"IN_RANDOM"
rows 1 into AUX_RAND;
if (:"AUX_RAND" is null) then begin
Leave;
end
else begin
IN_RANDOM = :"IN_RANDOM" + 1;
/* También he probado IN_RANDOM = IN_RANDOM +1; */
if (:"IN_RANDOM" > 200) then Leave;
end
end
OUT_RANDOM = IN_RANDOM;
suspend;
end
Se trata de detectar si un valor de entrada ya existe en AVAIL_CALC_TEMP y si existiera, incrementar el valor hasta que obtenga un valor nuevo que no exista. Ese valor se pasa después como resultado de salida.
Supongamos que la tabla AVAIL_CALC_TEMP contiene registros con el campo RANDOMNO = 1. Entonces si llamo al procedimiento con
Código Delphi
[-]Select * from NEW_PROCEDURE2(1)
me debería devolver el valor 2 (asumiendo que 2 no existe en la tabla). Pero resulta que he añadido la sentencia comprobando que el bucle no cree valores mayores de 200 y siempre me devuelve el valor 201.
Si por el contrario ejecuto
Código Delphi
[-]Select * from NEW_PROCEDURE2(2)
me devuelve correctamente el valor 2.
No sé qué estoy haciendo mal !
He probado todo, añadiendo variables propias del procedimiento, etc. Pero no consigo saber por qué no funcionan estas líneas.
Gracias como siempre por vuestra inestimable colaboración.