Olá
!
Hoje veremos como gerar números aleatorios dentro do banco de dados, mais conhecido como Random (ou Randomize), para utilizarmos este componete do Oracle, teremos que conhecer o pacote DBMS_RANDOM.
Dentro deste pacote existe 4 tipos de componentes, onde vou falar um pouco sobre cada um logo abaixo, onde 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 instalado no seu PC, algumas delas não podem ser executadas.
Voltando ao assunto, vou passar um exemplo de como criar um função utilizando os principios 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 vamos analizar linha por linha no código acima para você entender melhor o que está acontecendo.
1º e 2º Linha : Declarei uma variavel 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 variavel 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.
UFA! acabamos o código e deu para entender cada linha feita, agora você deve ter percebido que quando você mandar executar este código no seu banco de dados ele retorno alguns números negativos, isso se deve porque o pacote DBMS_RANDOM retorna valores negativos e positivos, se quizer 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);
Enfim, agora você terá condições para construir sistema com números randômicos, como por exemplo um sistema com Senhas aleatorias ou códigos para produtos.
Um Abraço!
Os textos publicados neste espaço são de responsabilidade única de seus autores (colunistas e leitores) e podem não expressar necessariamente a opinião do iMasters.
Rodrigo Almeida formando em analise de banco de dados pela IBTA-SP, especialista em microeletrônica pela INSA-AIME na França e Oracle Certified Associate 9i. Já trabalhou em empresas como BTC Texaco, DuPont do Brasil, Vivo São Paulo, Procwork, DBACorp e atualmente é DBA Oracle da Affinia Automotiva.
2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.