Continuando com nosso artigo sobre Package DBMS_RANDOM  , veremos agora DBMS_RANDOM.STRING e DBMS_RANDOM.NORMAL

 

 4. DBMS_RANDOM.STRING

Esta função gera uma string aleatória, possuindo a seguinte chamada:

DBMS_RANDOM.STRING(tipo IN CHAR, tamanho IN NUMBER) RETURN VARCHAR2

 

O parâmetro “tamanho” determina a quantidade de caracteres da string a ser gerada. Já o parâmetro “tipo” especifica o formato e aceita os seguintes valores:

'u', 'U': gera string com caracteres maiúsculos.

'l', 'L': gera string com caracteres minúsculos.

'a', 'A': gera string com caracteres maiúsculos e minúsculos.

'x', 'X': retorna string com números e letras maiúsculas (obs: não gera letras minúsculas).

'p','P': retorna string com qulaquer caractere que possa ser impresso (letras maiúsculas e minúsculas, números e caracteres como “!”, “%”, “@”, etc.).

 

Alguns exemplos:

(1) produz string alfanumérica (números e letras maiúsculas) de tamanho 8:

SQL> SELECT DBMS_RANDOM.STRING('x',8) FROM DUAL;

VALUE

----------

6NIY2QIV

 

(2) produz string com caracteres maiúsculos e minúsculos de tamanho 5:

SQL> SELECT DBMS_RANDOM.STRING('a',5) FROM DUAL;

VALUE

----------

ARxrg

 

 

5. DBMS_RANDOM.NORMAL

Função que retorna números aleatórios de uma distribuição normal padrão. Não aceita nenhum argumento como entrada.

SQL> SELECT DBMS_RANDOM.NORMAL FROM DUAL;

VALUE

----------

0,5134922

 

6. DBMS_RANDOM.SEED

Segundo o manual de referência da Oracle, as funçoes VALUE e STRING não precisam ser incializadas com uma “semente” antes de sua utilização. O Oracle as incializará automaticamente com a data/hora do sistema, userid e id do processo caso nenhuma inicialização explícita seja executada. Porém se houver a necessidade de uma inicialização explícita, deve ser utilizada a procedure SEED.

DBMS_RANDOM.SEED(semente IN BINARY_INTEGER);

DBMS_RANDOM.SEED(semente IN VARCHAR2);

 

A procedure aceita como semente tanto um número como uma string (de até 200 caracteres). Infelizmente o manual “Oracle® Database PL/SQL Packages and Types Reference” não fornece nenhuma informação mais “técnica” sobre esta procedure e nem sobre o método de geração de aleatórios. A única informação adicional do manual é a indicação de que se a uma mesma semente for utilizada em diferentes execuções, a sequência produzida pela função VALUE ou pela função STRING será sempre a mesma. Para produzir sequências diferentes em diferentes rodadas, basta não realizar a chamada para a procedure SEED.

 

O exemplo abaixo inicializa DBMS_RANDOM com a semente 25042011:

 

EXECUTE DBMS_RANDOM.SEED(25042011);

Assim finalizo este artigo.