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.