Tenho uma duvida, que creio que seja simples porem esta me consumindo . Sera que alguém consegue me ajudar?
Preciso coletar codigos aleatorios gerados atraves do pacote dbms_random, porem preciso de codigos não repetidos.
Para isso, estou executando um for com 60000 loops (for x 1..600000) com geração de codigos aleatorios com inserção linha a linha em determinada tabela. Ocorre que em cada geração faço uma verificação com NOT IN, ou seja, apenas retorna caso numero não esteja na tabela .
Desta forma, cursor retorna valor nulo exibindo erro de sql not found em tela .
Existe alguma forma de burlar este erro, ou seja, caso não encotre linhas execute novamente o loop?
Pensei logicamente em algo com:
IF SQL%NOTFOUND THEN
LOOP
END IF;
(obviamente não funciona) .
Tentei tambem um NLV no campo retornado, ou seja, retorno seria 0 ao invés de nulo, por exemplo. Porem tambem não solucionou o problema.
Segue codigo:
create or replace
PROCEDURE PRC_RANDON_COD as
v_cod number(6);
begin
for x IN 1..60000 loop
select nvl(cod,0) into v_cod from (
select nvl(trunc(dbms_random.value(100000, 999999), 0), 0) cod from dual
-- where nvl(trunc(dbms_random.value(100000, 999999), 0), 0)
/* NOT IN (select codigo_card from codigo_card )*/);
--IF v_cod <> 0 then;
INSERT INTO codigo_card(codigo_card) VALUES(v_cod);
--dbms_output.put_line(v_cod);
COMMIT;
-- END IF;
end loop;
END;
Existe alguma alternativa mais facil para resolução deste problema .
Obrigado a todos.