No entiendo exactamente que queres conseguir....
Además, todos los mensajes de error que has enviado parecen ser producto de un error "primario" que no se está viendo....
Porque no tratás de cambiar un poco tu rutina que genera el código aleatorio. Segun veo, queres generar un código para el que ya exista algún valor agregado a la tabla??
Es eso necesario???
que pasará cuando la tabla este vacia... nunca saldrá del ciclo...
Además, podrias agregar a tu procedure unas llamadas a dbms_output.Put_line, o un manejo de errores.
Que versión de Oracle utilizas... porque los métodos initialize, random y terminate están obsoletos ahora...
He revisado el package dbms_random y no eleva ninguna excepción....
porque no me envias la estructura completa de la tabla con triggers y stored procedures para poder hacer una prueba??
hasta luego.
ah... además te recomiendo el uso de la étiqueta
[ CODE ] (sin los espacios...) con lo que podes conseguir un resultado como el siguiente:
Código:
create or replace function GeneraCodigo
return integer as
code INTEGER;
num INTEGER;
seed BINARY_INTEGER;
begin
SELECT IdCodeSeq.NextVal INTO seed FROM Dual;
dbms_random.initialize(seed*1000);
code := dbms_random.random;
SELECT Count(*) into num FROM Tabla WHERE ID=code;
while num=0 LOOP
code := dbms_random.random;
select count(*) into num from Tabla where ID =code;
end loop;
dbms_random.terminate;
RETURN code;
end;
/
hasta luego.