Banco de Dados - Oracle

Randomize Oracle

Como gerar números aleatórios dentro do banco de dados, mais conhecido como Random (ou Randomize).

por Rodrigo Almeida



Como gerar números aleatórios dentro do banco de dados, mais conhecido como Random (ou Randomize). Para utilizarmos este componente do Oracle, teremos que conhecer o pacote DBMS_RANDOM.

Dentro deste pacote existem 4 tipos de componentes, onde falarei um pouco sobre cada, considerando que cada componente tem uma utilidade diferente dentro do sistema.

Componente

Tipo

Descrição

Initialize

Procedimento

Inicializa o gerador, como números acima de 5 digitos.

Seed

Procedimento

Reinicializa o processo de geração.

Terminate

Procedimento

Termina a geração dos números.

Random

Função

Recebe o número randômico.

Preste atenção pois quando formos solicitar o pacote DBMS_RANDOM no SQL*PLUS ele irá retornar mais de 4 funções, dependendo da versão que você tem do Oracle, algumas delas não podem ser executadas.

Voltando ao assunto, passarei um exemplo de como criar um função utilizando os princípios de ramdomização de números.

SQL >

VARIABLE MSG VARCHAR2 (2500)

SQL >

SET AUTOPRINT ON

SQL >

DECLARE

2

NUMERO NUMBER;

3

BEGIN

4

NUMERO := EXTRACT (HOUR FROM SYSDATE) +

5

EXTRACT (MINUTE FROM SYSDATE);

6

DBMS_RANDOM.INITIALIZE (NUMERO);

7

:MSG := "NÚMERO INICIAL =" || NUMERO;

8

:MSG := :MSG || CHR(10) || "NÚMEROS GERADOS =";

9

FOR I IN 1..7 LOOP

10

NUMERO := DBMS_RANDOM.RANDOM;

11

:MSG := :MSG || NUMERO || " ";

12

END LOOP;

13

DBMS_RANDOM.TERMINATE;

14

END;

15

/

Agora analisaremos linha por linha do código acima para entendermos melhor o que está acontecendo.

1º e 2º Linha : Declarei uma variável local chamada Número do tipo Número (Number)

3º Linha : Abri meu espaço para programação

4º e 5º Linha : Peguei a variável Numero e igualei ao Minuto e a hora do sistema atual.

6º Linha : Inicializei o pacote DBMS_Random no programa

7º Linha : Pegamos a variável MSG que foi declarada no 1º SQL e inserimos um texto para melhorar a exibição no resultado.

8º Linha : Fizemos a mesma coisa que na 7º linha, mais com a função CHR.

9º Linha : Coloquei uma condição FOR para gerar 7 tipos de números aleatorios.

10º Linha : Neste instante a variável Numero está "fazendo" os números aleatorios.

11º Linha : A mesma coisa que na linhas 7 e 8, mais agora para exibir os resultados dos números.

12º Linha : Encerramos a condição FOR depois que o sistema retorno 7 valores.

13º Linha : Estamos agora fechando o pacote DBMS_Random.

14º Linha : Fechamos a área de programação.

15º Linha : Mandamos executar no banco de dados.

Enfim acabamos o código e deu para entender cada linha feita, agora você deve ter percebido que quando mandar executar este código no seu banco de dados ele retorna alguns números negativos, isso se deve porque o pacote DBMS_RANDOM retorna valores negativos e positivos, se quiser melhorar isso, o pacote disponibiliza uma função chamada ABS,onde ele só retorna valores positivos.

Na 10º linha faça está mudança :

NUMERO := ABS(DBMS_RANDOM.RANDOM);

Agora você terá condições para construir sistema com números randômicos, como por exemplo um sistema com Senhas aleatórias ou códigos para produtos.

Espero que tenha solucionado algumas duvidas.

Rodrigo Almeida

Rodrigo Almeida